This commit is contained in:
Gerasimos Maropoulos 2016-08-29 07:28:19 +03:00
parent d03c9ad231
commit 480f85a9db
2 changed files with 17 additions and 8 deletions

View File

@ -33,6 +33,10 @@ type Websocket struct {
// MaxMessageSize max message size allowed from connection
// Default value is 1024
MaxMessageSize int64
// BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text
// see https://github.com/kataras/iris/issues/387#issuecomment-243006022 for more
// defaults to false
BinaryMessages bool
// Endpoint is the path which the websocket server will listen for clients/connections
// Default value is empty string, if you don't set it the Websocket server is disabled.
Endpoint string
@ -52,6 +56,7 @@ func DefaultWebsocket() *Websocket {
PongTimeout: DefaultPongTimeout,
PingPeriod: DefaultPingPeriod,
MaxMessageSize: DefaultMaxMessageSize,
BinaryMessages: false,
ReadBufferSize: 4096,
WriteBufferSize: 4096,
Headers: make(map[string]string, 0),

View File

@ -348,6 +348,7 @@ type (
websocketConnection struct {
underline *websocket.Conn
messageType int
id string
send chan []byte
onDisconnectListeners []WebsocketDisconnectFunc
@ -367,9 +368,10 @@ var _ WebsocketConnection = &websocketConnection{}
func newWebsocketConnection(websocketConn *websocket.Conn, s *websocketServer) *websocketConnection {
c := &websocketConnection{
id: utils.RandomString(64),
underline: websocketConn,
send: make(chan []byte, 256),
id: utils.RandomString(64),
messageType: websocket.TextMessage,
underline: websocketConn,
send: make(chan []byte, 256),
onDisconnectListeners: make([]WebsocketDisconnectFunc, 0),
onErrorListeners: make([]WebsocketErrorFunc, 0),
onNativeMessageListeners: make([]WebsocketNativeMessageFunc, 0),
@ -377,6 +379,11 @@ func newWebsocketConnection(websocketConn *websocket.Conn, s *websocketServer) *
websocketServer: s,
}
// set the messageType to binary if configuration says to
if s.config.BinaryMessages {
c.messageType = websocket.BinaryMessage
}
c.self = newWebsocketEmmiter(c, c.id)
c.broadcast = newWebsocketEmmiter(c, NotMe)
c.all = newWebsocketEmmiter(c, All)
@ -420,7 +427,8 @@ func (c *websocketConnection) writer() {
}
c.underline.SetWriteDeadline(time.Now().Add(c.websocketServer.config.WriteTimeout))
res, err := c.underline.NextWriter(websocket.TextMessage)
res, err := c.underline.NextWriter(c.messageType)
if err != nil {
return
}
@ -435,10 +443,6 @@ func (c *websocketConnection) writer() {
return
}
// if err := c.write(websocket.TextMessage, msg); err != nil {
// return
// }
case <-ticker.C:
if err := c.write(websocket.PingMessage, []byte{}); err != nil {
return