Skip to content

Instantly share code, notes, and snippets.

@sharvell
Last active March 14, 2020 08:59
Show Gist options
  • Select an option

  • Save sharvell/d86ca8bf98a7b1591f6d to your computer and use it in GitHub Desktop.

Select an option

Save sharvell/d86ca8bf98a7b1591f6d to your computer and use it in GitHub Desktop.
gin and socket.io
package main
/*
Like Snoops Gin and Juice, but gin and socket.io...
https://github.com/gin-gonic/gin/issues/124
*/
var Socketio_Server * socketio.Server
func main() {
var router_engine = gin.Default ()
var err error
Socketio_Server, err = socketio.NewServer(nil)
if err != nil {
panic ( err )
}
router_engine.GET ( "/", IndexHandler )
router_engine.Static ( "/public", "./public" )
router_engine.GET ( "/socket.io", socketHandler )
router_engine.POST ( "/socket.io", socketHandler )
router_engine.Handle ( "WS", "/socket.io", [] gin.HandlerFunc { socketHandler } )
router_engine.Handle ( "WSS", "/socket.io", [] gin.HandlerFunc { socketHandler } )
router_engine.Run(":8000")
}
func socketHandler ( c * gin.Context ) {
Socketio_Server.On("connection", func(so socketio.Socket) {
fmt.Println("on connection")
so.Join("chat")
so.On("chat message", func(msg string) {
fmt.Println("emit:", so.Emit("chat message", msg))
so.BroadcastTo("chat", "chat message", msg)
})
so.On("disconnection", func() {
fmt.Println("on disconnect")
})
})
Socketio_Server.On ( "error", func( so socketio.Socket, err error) {
fmt.Printf ( "[ WebSocket ] Error : %v", err.Error () )
})
Socketio_Server.ServeHTTP ( c.Writer, c.Request )
}
@marshallford

Copy link
Copy Markdown

I am getting the following error, did the Gin API change? I have spent way too long messing with this snippet trying to figure out what is going on. Any ideas?

./main.go:32: cannot use []gin.HandlerFunc literal (type []gin.HandlerFunc) as type gin.HandlerFunc in argument to r.RouterGroup.Handle
./main.go:33: cannot use []gin.HandlerFunc literal (type []gin.HandlerFunc) as type gin.HandlerFunc in argument to r.RouterGroup.Handle

@c9s

c9s commented Aug 9, 2017

Copy link
Copy Markdown

same here

@wateryoma

Copy link
Copy Markdown

just replace []gin.HandlerFunc with gin.WrapF(socketHandler)

gin-gonic/gin#293

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment