diff options
author | Taylor Gerring <taylor.gerring@gmail.com> | 2015-02-11 18:40:12 +0800 |
---|---|---|
committer | Taylor Gerring <taylor.gerring@gmail.com> | 2015-02-11 18:40:12 +0800 |
commit | cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007 (patch) | |
tree | ab28c518bd1b78f6b8ac8b241951ad161cb268a9 /websocket/client.go | |
parent | 21fd31dad8bc6e0291ca405314b516670333c707 (diff) | |
parent | c6af5f0a275608ea6c797ef826e6090885f24eac (diff) | |
download | go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar.gz go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar.bz2 go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar.lz go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar.xz go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.tar.zst go-tangerine-cfddb7f3cd3b8cecb1e59412ce4db5769f6c8007.zip |
Merge branch 'develop' into jsonrpc
Conflicts:
rpc/ws/server.go
Diffstat (limited to 'websocket/client.go')
-rw-r--r-- | websocket/client.go | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/websocket/client.go b/websocket/client.go deleted file mode 100644 index 340a67aea..000000000 --- a/websocket/client.go +++ /dev/null @@ -1,126 +0,0 @@ -package websocket - -import ( - "fmt" - "io" - - ws "code.google.com/p/go.net/websocket" -) - -const channelBufSize = 100 - -var maxId int = 0 - -type MsgFunc func(c *Client, msg *Message) - -// Chat client. -type Client struct { - id int - ws *ws.Conn - server *Server - ch chan *Message - doneCh chan bool - - onMessage MsgFunc -} - -// Create new chat client. -func NewClient(ws *ws.Conn, server *Server) *Client { - - if ws == nil { - panic("ws cannot be nil") - } - - if server == nil { - panic("server cannot be nil") - } - - maxId++ - ch := make(chan *Message, channelBufSize) - doneCh := make(chan bool) - - return &Client{maxId, ws, server, ch, doneCh, nil} -} - -func (c *Client) Id() int { - return c.id -} - -func (c *Client) Conn() *ws.Conn { - return c.ws -} - -func (c *Client) Write(data interface{}, id int) { - c.write(&Message{Id: id, Data: data}) -} -func (c *Client) Event(data interface{}, ev string, id int) { - c.write(&Message{Id: id, Data: data, Event: ev}) -} - -func (c *Client) write(msg *Message) { - select { - case c.ch <- msg: - default: - c.server.Del(c) - err := fmt.Errorf("client %d is disconnected.", c.id) - c.server.Err(err) - } -} - -func (c *Client) Done() { - c.doneCh <- true -} - -// Listen Write and Read request via chanel -func (c *Client) Listen() { - go c.listenWrite() - c.listenRead() -} - -// Listen write request via chanel -func (c *Client) listenWrite() { - for { - select { - - // send message to the client - case msg := <-c.ch: - wslogger.Debugln("Send:", msg) - ws.JSON.Send(c.ws, msg) - - // receive done request - case <-c.doneCh: - c.server.Del(c) - c.doneCh <- true // for listenRead method - return - } - } -} - -// Listen read request via chanel -func (c *Client) listenRead() { - for { - select { - - // receive done request - case <-c.doneCh: - c.server.Del(c) - c.doneCh <- true // for listenWrite method - return - - // read data from ws connection - default: - var msg Message - err := ws.JSON.Receive(c.ws, &msg) - if err == io.EOF { - c.doneCh <- true - } else if err != nil { - c.server.Err(err) - } else { - wslogger.Debugln(&msg) - if c.onMessage != nil { - c.onMessage(c, &msg) - } - } - } - } -} |