forked from francoispqt/gojay
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
75 lines (70 loc) · 2.2 KB
/
main.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
73
74
75
// package main simulates a conversation between
// a given set of websocket clients and a server.
//
// It spins up a web socket server.
// On a client's connection it creates a SenderReceiver which handles JSON Stream
// encoding and decoding using gojay's streaming API to abstract JSON communication
// between server and client, only having to handle go values.
//
// To simulate a conversation:
// - the server sends a welcome message to the client
// - when the client receives the message, it sends a message back to the server
// - when the server receives the ack message, it will send a message randomly to a client
// - when the client receives the message, it sends a message back to the server... and so on.
package main
import (
"log"
"strconv"
"github.com/michal800106/gojay/examples/websocket/client"
"github.com/michal800106/gojay/examples/websocket/comm"
"github.com/michal800106/gojay/examples/websocket/server"
)
func createServer(done chan error) {
// create our server, with a done signal
s := server.NewServer()
// set our connection handler
s.OnConnection(func(c *server.Client) {
// send welcome message to initiate the conversation
c.SendMessage(&comm.Message{
UserName: "server",
Message: "Welcome !",
})
// start handling messages
c.OnMessage(func(m *comm.Message) {
log.Print("message received from client: ", m)
s.BroadCastRandom(c, m)
})
})
go s.Listen(":8070", done)
}
func createClient(url, origin string, i int) {
// create our client
c := client.NewClient(i)
// Dial connection to the WS server
err := c.Dial(url, origin)
if err != nil {
panic(err)
}
str := strconv.Itoa(i)
// Init client's sender and receiver
// Set the OnMessage handler
c.OnMessage(func(m *comm.Message) {
log.Print("client "+str+" received from "+m.UserName+" message: ", m)
c.SendMessage(&comm.Message{
UserName: str,
Message: "Responding to: " + m.UserName + " | old message: " + m.Message,
})
})
}
// Our main function
func main() {
done := make(chan error)
createServer(done)
// add our clients connection
for i := 0; i < 100; i++ {
i := i
go createClient("ws://localhost:8070/ws", "http://localhost/", i)
}
// handle server's termination
log.Fatal(<-done)
}