From f54949ba3a468de48d6d5e340f77a03873447a4b Mon Sep 17 00:00:00 2001 From: William Petit Date: Mon, 5 Aug 2024 17:53:59 +0200 Subject: [PATCH] feat: expose websocket connection constructor --- server.go | 63 ++++++++++++++++++++++++++++-------------- transport/websocket.go | 10 +++++-- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/server.go b/server.go index 235a603..c4e3c41 100644 --- a/server.go +++ b/server.go @@ -25,7 +25,8 @@ var ( ErrorConnectionNotFound = errors.New("Connection not found") ) -/** +/* +* socket.io server instance */ type Server struct { @@ -42,7 +43,8 @@ type Server struct { tr transport.Transport } -/** +/* +* Close current channel */ func (c *Channel) Close() { @@ -51,7 +53,8 @@ func (c *Channel) Close() { } } -/** +/* +* Get ip of socket client */ func (c *Channel) Ip() string { @@ -62,14 +65,16 @@ func (c *Channel) Ip() string { return c.ip } -/** +/* +* Get request header of this connection */ func (c *Channel) RequestHeader() http.Header { return c.requestHeader } -/** +/* +* Get channel by it's sid */ func (s *Server) GetChannel(sid string) (*Channel, error) { @@ -84,7 +89,8 @@ func (s *Server) GetChannel(sid string) (*Channel, error) { return c, nil } -/** +/* +* Join this channel to given room */ func (c *Channel) Join(room string) error { @@ -111,7 +117,8 @@ func (c *Channel) Join(room string) error { return nil } -/** +/* +* Remove this channel from given room */ func (c *Channel) Leave(room string) error { @@ -138,7 +145,8 @@ func (c *Channel) Leave(room string) error { return nil } -/** +/* +* Get amount of channels, joined to given room, using channel */ func (c *Channel) Amount(room string) int { @@ -149,7 +157,8 @@ func (c *Channel) Amount(room string) int { return c.server.Amount(room) } -/** +/* +* Get amount of channels, joined to given room, using server */ func (s *Server) Amount(room string) int { @@ -160,7 +169,8 @@ func (s *Server) Amount(room string) int { return len(roomChannels) } -/** +/* +* Get list of channels, joined to given room, using channel */ func (c *Channel) List(room string) []*Channel { @@ -171,7 +181,8 @@ func (c *Channel) List(room string) []*Channel { return c.server.List(room) } -/** +/* +* Get list of channels, joined to given room, using server */ func (s *Server) List(room string) []*Channel { @@ -201,7 +212,8 @@ func (c *Channel) BroadcastTo(room, method string, args interface{}) { c.server.BroadcastTo(room, method, args) } -/** +/* +* Broadcast message to all room channels */ func (s *Server) BroadcastTo(room, method string, args interface{}) { @@ -220,7 +232,8 @@ func (s *Server) BroadcastTo(room, method string, args interface{}) { } } -/** +/* +* Broadcast to all clients */ func (s *Server) BroadcastToAll(method string, args interface{}) { @@ -234,7 +247,8 @@ func (s *Server) BroadcastToAll(method string, args interface{}) { } } -/** +/* +* Generate new id for socket.io connection */ func generateNewId(custom string) string { @@ -247,7 +261,8 @@ func generateNewId(custom string) string { return buf.String()[:20] } -/** +/* +* On connection system handler, store sid */ func onConnectStore(c *Channel) { @@ -257,7 +272,8 @@ func onConnectStore(c *Channel) { c.server.sids[c.Id()] = c } -/** +/* +* On disconnection system handler, clean joins and sid */ func onDisconnectCleanup(c *Channel) { @@ -301,7 +317,8 @@ func (s *Server) SendOpenSequence(c *Channel) { c.out <- protocol.MustEncode(&protocol.Message{Type: protocol.MessageTypeEmpty}) } -/** +/* +* Setup event loop for given connection */ func (s *Server) SetupEventLoop(conn transport.Connection, remoteAddr string, @@ -332,7 +349,8 @@ func (s *Server) SetupEventLoop(conn transport.Connection, remoteAddr string, s.callLoopEvent(c, OnConnection) } -/** +/* +* implements ServeHTTP function from http.Handler */ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -345,7 +363,8 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { s.tr.Serve(w, r) } -/** +/* +* Get amount of current connected sids */ func (s *Server) AmountOfSids() int64 { @@ -355,7 +374,8 @@ func (s *Server) AmountOfSids() int64 { return int64(len(s.sids)) } -/** +/* +* Get amount of rooms with at least one channel(or sid) joined */ func (s *Server) AmountOfRooms() int64 { @@ -365,7 +385,8 @@ func (s *Server) AmountOfRooms() int64 { return int64(len(s.channels)) } -/** +/* +* Create new socket.io server */ func NewServer(tr transport.Transport) *Server { diff --git a/transport/websocket.go b/transport/websocket.go index e9fec27..03b635e 100644 --- a/transport/websocket.go +++ b/transport/websocket.go @@ -120,12 +120,14 @@ func (wst *WebsocketTransport) HandleConnection( return &WebsocketConnection{socket, wst}, nil } -/** +/* +* Websocket connection do not require any additional processing */ func (wst *WebsocketTransport) Serve(w http.ResponseWriter, r *http.Request) {} -/** +/* +* Returns websocket connection with default params */ func GetDefaultWebsocketTransport() *WebsocketTransport { @@ -137,3 +139,7 @@ func GetDefaultWebsocketTransport() *WebsocketTransport { BufferSize: WsDefaultBufferSize, } } + +func NewWebsocketConnection(socket *websocket.Conn, transport *WebsocketTransport) *WebsocketConnection { + return &WebsocketConnection{socket, transport} +}