-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
106 lines (79 loc) · 2.39 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var html = require('yo-yo')
var through = require('through2')
var EventEmitter = require('events').EventEmitter
var websocket = require('websocket-stream')
var ws = websocket('ws://localhost:5000' )
var root = document.body.appendChild(document.createElement('div'))
var state = {
username: 'hey_joe',
rooms: []
}
var bus = new EventEmitter()
require('./reducer.js')(bus, state)
bus.on('update', update)
update()
ws.pipe(through(function (buff, enc, next) {
var msg = buff.toString()
if (/create_chat/.test(msg)) {
var room = JSON.parse(msg.split('!')[1])
bus.emit('add-chat-room', room)
} else {
var data = msg.split('!')
var chat_id = data[1]
var message = data[2]
bus.emit('add-message-into-chat', chat_id, message)
}
next()
}))
ws.write('connection!' + state.username)
bus.emit('fetch-chat-rooms')
function update() {
html.update(root, html`<div>
<h1>Chat rooms</h1>
<h2>Current user ${state.username}</h2>
<form onsubmit=${handleChangeUser}>
<h3>Change user</h3>
<input name="username" >
</form>
<button onclick=${handleCreateChat}>Create chat</button>
${state.rooms.map((room) => html`
<div>
<h3>Chat - ${room.id}</h3>
<form onsubmit=${handleAddUser} data-chat=${room.id}>
<h4>Add user to the chat</h4>
<input name="username" />
</form>
<pre>${room.messages.join('\n')}</pre>
<form onsubmit=${handleSendMessage} data-chat=${room.id}>
<input name="message">
</form>
</div>
`)}
</div>`)
function handleChangeUser (evt) {
evt.preventDefault()
var username = this.elements.username.value
bus.emit('change-user', username)
this.reset()
}
function handleAddUser (evt) {
evt.preventDefault()
var username = this.elements.username.value
var chat_id = this.getAttribute('data-chat')
if (!username) return
ws.write('add_user!' + username + '!' + chat_id)
this.reset()
}
function handleCreateChat (evt) {
fetch('http://localhost:5000/chats?user=' + state.username, { method: 'POST' })
}
function handleSendMessage (evt) {
evt.preventDefault()
var username = state.username
var chat_id = this.getAttribute('data-chat')
var message = this.elements.message.value
if (!message) return
ws.write('add_message!' + username + '!' + chat_id + '!' + message)
this.reset()
}
}