binary messages and tests

This commit is contained in:
Ola Holmström
2015-06-10 23:56:06 +02:00
parent 29728fab0f
commit 0c379737b4
9 changed files with 205 additions and 79 deletions
+29 -4
View File
@@ -29,7 +29,21 @@ func (s *Session) writeMessage(message *envelope) {
func (s *Session) writeRaw(message *envelope) error {
s.conn.SetWriteDeadline(time.Now().Add(s.config.WriteWait))
return s.conn.WriteMessage(message.t, message.msg)
err := s.conn.WriteMessage(message.t, message.msg)
if err != nil {
return err
}
if message.t == websocket.CloseMessage {
err := s.conn.Close()
if err != nil {
return err
}
}
return nil
}
func (s *Session) close() {
@@ -63,7 +77,7 @@ func (s *Session) writePump(errorHandler handleErrorFunc) {
}
}
func (s *Session) readPump(messageHandler handleMessageFunc, errorHandler handleErrorFunc) {
func (s *Session) readPump(messageHandler handleMessageFunc, messageHandlerBinary handleMessageFunc, errorHandler handleErrorFunc) {
defer s.conn.Close()
s.conn.SetReadLimit(s.config.MaxMessageSize)
@@ -75,17 +89,28 @@ func (s *Session) readPump(messageHandler handleMessageFunc, errorHandler handle
})
for {
_, message, err := s.conn.ReadMessage()
t, message, err := s.conn.ReadMessage()
if err != nil {
go errorHandler(s, err)
break
}
go messageHandler(s, message)
if t == websocket.TextMessage {
go messageHandler(s, message)
}
if t == websocket.BinaryMessage {
go messageHandlerBinary(s, message)
}
}
}
// Write message to session.
func (s *Session) WriteBinary(msg []byte) {
s.writeMessage(&envelope{t: websocket.BinaryMessage, msg: msg})
}
// Write message to session.
func (s *Session) Write(msg []byte) {
s.writeMessage(&envelope{t: websocket.TextMessage, msg: msg})