-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
72 lines (64 loc) · 1.14 KB
/
client.go
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
package main
import (
"bufio"
"fmt"
"net"
"strings"
)
type client struct {
conn net.Conn
nick string
room *room
commands chan<- command
}
func (c *client) readInput() {
for {
msg, err := bufio.NewReader(c.conn).ReadString('\n')
if err != nil {
return
}
msg = strings.Trim(msg, "\r\n")
args := strings.Split(msg, " ")
cmd := strings.TrimSpace(args[0])
switch cmd {
case "/nick":
c.commands <- command{
id: CMD_NICK,
client: c,
args: args,
}
case "/join":
c.commands <- command{
id: CMD_JOIN,
client: c,
args: args,
}
case "/rooms":
c.commands <- command{
id: CMD_ROOMS,
client: c,
args: args,
}
case "/msg":
c.commands <- command{
id: CMD_MSG,
client: c,
args: args,
}
case "/quit":
c.commands <- command{
id: CMD_QUIT,
client: c,
args: args,
}
default:
c.err(fmt.Errorf("unknown command: %s", cmd))
}
}
}
func (c *client) err(err error) {
c.conn.Write([]byte("ERR: " + err.Error() + "\n\r"))
}
func (c *client) msg(message string) {
c.conn.Write([]byte("> " + message + "\n\r"))
}