aboutsummaryrefslogtreecommitdiffstats
path: root/websocket/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'websocket/client.go')
-rw-r--r--websocket/client.go126
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)
- }
- }
- }
- }
-}