-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathclient.ts
66 lines (58 loc) · 1.95 KB
/
client.ts
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
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { RpcError as GrpcWebError } from 'grpc-web';
import { ChatClient } from './proto/chat_grpc_web_pb';
import { ClientMessage, ServerMessage } from './proto/chat_pb';
let user: string;
window.addEventListener('DOMContentLoaded', () => {
document.getElementById('submit-name')?.addEventListener(
'submit',
async (e) => {
e.preventDefault();
user = (document.getElementById('name') as HTMLFormElement)?.value;
if (user) {
document.getElementById('submit-message')!.style.display = 'block';
document.getElementById('submit-name')!.style.display = 'none';
initChat(user);
}
},
false
);
});
async function initChat(user: string) {
const client = new ChatClient('http://' + window.location.hostname + ':8080');
const clientMessage = new ClientMessage();
clientMessage.setUser(user);
const stream = client.join(clientMessage);
stream.on('data', (message: ServerMessage) => {
const messageElement = document.createElement('div');
messageElement.innerText = `${message.getUser()}: ${message.getText()}`;
document.getElementById('messages')!.appendChild(messageElement);
});
function sendMessage(message: string) {
const clientMessage = new ClientMessage();
clientMessage.setUser(user);
clientMessage.setText(message);
client.send(
clientMessage,
undefined,
(err: GrpcWebError, response: ServerMessage) => {
if (err) {
console.error(err);
} else {
console.log('response', response.toObject());
(document.getElementById('message') as HTMLFormElement)!.value = '';
}
}
);
}
document.getElementById('submit-message')?.addEventListener(
'submit',
(e) => {
e.preventDefault();
const message = (document.getElementById('message') as HTMLFormElement)
?.value;
sendMessage(message);
},
false
);
}