@@ -3,32 +3,37 @@ package gowebsocket
33import (
44 "crypto/tls"
55 "errors"
6- "github.com/gorilla/websocket"
7- "github.com/sacOO7/go-logger"
6+ "fmt"
87 "net/http"
98 "net/url"
109 "reflect"
1110 "sync"
1211 "time"
12+
13+ "github.com/gorilla/websocket"
14+ logging "github.com/sacOO7/go-logger"
1315)
1416
15- type Empty struct {
17+ type empty struct {
1618}
1719
18- var logger = logging .GetLogger (reflect .TypeOf (Empty {}).PkgPath ()).SetLevel (logging .OFF )
20+ var logger = logging .GetLogger (reflect .TypeOf (empty {}).PkgPath ()).SetLevel (logging .OFF )
1921
22+ // EnableLogging enables the logger
2023func (socket Socket ) EnableLogging () {
2124 logger .SetLevel (logging .TRACE )
2225}
2326
27+ // GetLogger gets the logger object
2428func (socket Socket ) GetLogger () logging.Logger {
2529 return logger
2630}
2731
32+ // Socket provides a websocket request
2833type Socket struct {
2934 Conn * websocket.Conn
3035 WebsocketDialer * websocket.Dialer
31- Url string
36+ URL string
3237 ConnectionOptions ConnectionOptions
3338 RequestHeader http.Header
3439 OnConnected func (socket Socket )
@@ -44,20 +49,23 @@ type Socket struct {
4449 receiveMu * sync.Mutex
4550}
4651
52+ // ConnectionOptions contains connection options
4753type ConnectionOptions struct {
4854 UseCompression bool
4955 UseSSL bool
5056 Proxy func (* http.Request ) (* url.URL , error )
5157 Subprotocols []string
5258}
5359
54- // todo Yet to be done
60+ // ReconnectionOptions provides options for reconnecting to the websocket
61+ // TODO Yet to be done
5562type ReconnectionOptions struct {
5663}
5764
65+ // New creates a new websocket for the given url
5866func New (url string ) Socket {
5967 return Socket {
60- Url : url ,
68+ URL : url ,
6169 RequestHeader : http.Header {},
6270 ConnectionOptions : ConnectionOptions {
6371 UseCompression : false ,
@@ -77,16 +85,17 @@ func (socket *Socket) setConnectionOptions() {
7785 socket .WebsocketDialer .Subprotocols = socket .ConnectionOptions .Subprotocols
7886}
7987
88+ // Connect connects to the websocket server
8089func (socket * Socket ) Connect () {
8190 var err error
8291 var resp * http.Response
8392 socket .setConnectionOptions ()
8493
85- socket .Conn , resp , err = socket .WebsocketDialer .Dial (socket .Url , socket .RequestHeader )
94+ socket .Conn , resp , err = socket .WebsocketDialer .Dial (socket .URL , socket .RequestHeader )
8695
8796 if err != nil {
8897 logger .Error .Println ("Error while connecting to server " , err )
89- logger .Error .Println ("HTTP Response %d status: %s" , resp .StatusCode , resp .Status )
98+ logger .Error .Println (fmt . Sprintf ( "HTTP Response %d status: %s" , resp .StatusCode , resp .Status ) )
9099 socket .IsConnected = false
91100 if socket .OnConnectError != nil {
92101 socket .OnConnectError (err , * socket )
@@ -134,19 +143,22 @@ func (socket *Socket) Connect() {
134143 for {
135144 socket .receiveMu .Lock ()
136145 if socket .Timeout != 0 {
137- socket .Conn .SetReadDeadline (time .Now ().Add (socket .Timeout ))
146+ err := socket .Conn .SetReadDeadline (time .Now ().Add (socket .Timeout ))
147+ if err != nil {
148+ logger .Error .Println (err )
149+ }
138150 }
139151 messageType , message , err := socket .Conn .ReadMessage ()
140152 socket .receiveMu .Unlock ()
141153 if err != nil {
142- logger .Error .Println ("read:" , err )
154+ logger .Error .Println (fmt . Sprintf ( "read: %s " , err ) )
143155 if socket .OnDisconnected != nil {
144156 socket .IsConnected = false
145157 socket .OnDisconnected (err , * socket )
146158 }
147159 return
148160 }
149- logger .Info .Println ("recv: %s" , message )
161+ logger .Info .Println (fmt . Sprintf ( "recv: %s" , message ) )
150162
151163 switch messageType {
152164 case websocket .TextMessage :
@@ -162,6 +174,7 @@ func (socket *Socket) Connect() {
162174 }()
163175}
164176
177+ // SendText sends a test message to the server
165178func (socket * Socket ) SendText (message string ) {
166179 err := socket .send (websocket .TextMessage , []byte (message ))
167180 if err != nil {
@@ -170,6 +183,7 @@ func (socket *Socket) SendText(message string) {
170183 }
171184}
172185
186+ // SendBinary sends a binary message to the websocket
173187func (socket * Socket ) SendBinary (data []byte ) {
174188 err := socket .send (websocket .BinaryMessage , data )
175189 if err != nil {
@@ -185,12 +199,13 @@ func (socket *Socket) send(messageType int, data []byte) error {
185199 return err
186200}
187201
202+ // Close closese the websocket
188203func (socket * Socket ) Close () {
189204 err := socket .send (websocket .CloseMessage , websocket .FormatCloseMessage (websocket .CloseNormalClosure , "" ))
190205 if err != nil {
191206 logger .Error .Println ("write close:" , err )
192207 }
193- socket .Conn .Close ()
208+ _ = socket .Conn .Close ()
194209 if socket .OnDisconnected != nil {
195210 socket .IsConnected = false
196211 socket .OnDisconnected (err , * socket )
0 commit comments