@@ -3,18 +3,18 @@ package scclient
33import (
44 "log"
55 _ "golang.org/x/net/websocket"
6- "github.com/rgamba/evtwebsocket"
76 _ "time"
87 "github.com/sacOO7/socketcluster-client-go/scclient/models"
98 "github.com/sacOO7/socketcluster-client-go/scclient/utils"
109 "github.com/sacOO7/socketcluster-client-go/scclient/parser"
10+ "github.com/sacOO7/gowebsocket"
1111)
1212
1313type Client struct {
1414 authToken * string
1515 url string
1616 counter utils.AtomicCounter
17- socket * evtwebsocket. Conn
17+ socket gowebsocket. Socket
1818 onConnect func (client Client )
1919 onConnectError func (client Client , err error )
2020 onDisconnect func (client Client , err error )
@@ -39,143 +39,146 @@ func (client *Client) SetAuthenticationListener(onSetAuthentication func(client
3939}
4040
4141func (client * Client ) registerCallbacks () {
42- client .socket = & evtwebsocket.Conn {
43- // Fires when the connection is established
44- OnConnected : func (w * evtwebsocket.Conn ) {
45- if client .onConnect != nil {
46- client .onConnect (* client )
42+
43+ client .socket .OnConnected = func (socket gowebsocket.Socket ) {
44+ client .sendHandshake ()
45+ if client .onConnect != nil {
46+ client .onConnect (* client )
47+ }
48+ };
49+
50+ client .socket .OnConnectError = func (err error , socket gowebsocket.Socket ) {
51+ if err != nil {
52+ if client .onConnectError != nil {
53+ client .onConnectError (* client , err )
4754 }
48- client .sendHandshake ()
49- },
50- // Fires when a new message arrives from the server
51- OnMessage : func (msg []byte , w * evtwebsocket.Conn ) {
52- log .Printf ("%s" , msg )
53-
54- if utils .IsEqual ("#1" , msg ) {
55- w .Send (utils .CreateMessageFromString ("#2" ));
56- } else {
57- var messageObject = utils .DeserializeData (msg )
58- data , rid , cid , eventname , error := parser .GetMessageDetails (messageObject )
59-
60- parseresult := parser .Parse (rid , cid , eventname )
61-
62- switch parseresult {
63- case parser .ISAUTHENTICATED :
64- isAuthenticated := utils .GetIsAuthenticated (messageObject )
65- if client .onAuthentication != nil {
66- client .onAuthentication (* client , isAuthenticated );
67- }
68- case parser .SETTOKEN :
69- token := utils .GetAuthToken (messageObject )
70- if client .onSetAuthentication != nil {
71- client .onSetAuthentication (* client , token )
72- }
73-
74- case parser .REMOVETOKEN :
75- client .authToken = nil
76- case parser .EVENT :
77- if client .hasEventAck (eventname .(string )) {
78- client .handleOnAckListener (eventname .(string ), data , client .ack (cid ))
79- } else {
80- client .handleOnListener (eventname .(string ), data )
81- }
82- case parser .ACKRECEIVE :
83- client .handleEmitAck (rid , error , data )
84- case parser .PUBLISH :
85- channel := models .GetChannelObject (data )
86- client .handleOnListener (channel .Channel , channel .Data )
55+ }
56+ };
57+
58+ client .socket .OnTextMessage = func (message string , socket gowebsocket.Socket ) {
59+ log .Printf ("%s" , message )
60+
61+ if message == "#1" {
62+ client .socket .SendText ("#2" );
63+ } else {
64+ var messageObject = utils .DeserializeDataFromString (message )
65+ data , rid , cid , eventname , error := parser .GetMessageDetails (messageObject )
66+
67+ parseresult := parser .Parse (rid , cid , eventname )
68+
69+ switch parseresult {
70+ case parser .ISAUTHENTICATED :
71+ isAuthenticated := utils .GetIsAuthenticated (messageObject )
72+ if client .onAuthentication != nil {
73+ client .onAuthentication (* client , isAuthenticated );
74+ }
75+ case parser .SETTOKEN :
76+ token := utils .GetAuthToken (messageObject )
77+ if client .onSetAuthentication != nil {
78+ client .onSetAuthentication (* client , token )
8779 }
88- }
8980
90- },
91- // Fires when an error occurs and connection is closed
92- OnError : func (err error ) {
93- if client .onDisconnect != nil {
94- client .onDisconnect (* client , err )
81+ case parser .REMOVETOKEN :
82+ client .authToken = nil
83+ case parser .EVENT :
84+ if client .hasEventAck (eventname .(string )) {
85+ client .handleOnAckListener (eventname .(string ), data , client .ack (cid ))
86+ } else {
87+ client .handleOnListener (eventname .(string ), data )
88+ }
89+ case parser .ACKRECEIVE :
90+ client .handleEmitAck (rid , error , data )
91+ case parser .PUBLISH :
92+ channel := models .GetChannelObject (data )
93+ client .handleOnListener (channel .Channel , channel .Data )
9594 }
96- },
95+ }
96+ };
97+
98+
99+ client .socket .OnDisconnected = func (err error , socket gowebsocket.Socket ) {
100+ if client .onDisconnect != nil {
101+ client .onDisconnect (* client , err )
102+ }
103+ return
97104 }
98105
99106}
100107
101108func (client * Client ) Connect () {
109+ client .socket = gowebsocket .New (client .url )
102110 client .registerCallbacks ()
103111 // Connect
104- err := client .socket .Dial (client .url , "" )
105- if err != nil {
106- if client .onConnectError != nil {
107- client .onConnectError (* client , err )
108- }
109- }
112+ client .socket .Connect ()
110113}
111114
112115func (client * Client ) sendHandshake () {
113- handshake := utils .SerializeData (models .GetHandshakeObject (client .authToken , int (client .counter .IncrementAndGet ())))
114- client .socket .Send ( utils . CreateMessageFromByte ( handshake ) );
116+ handshake := utils .SerializeDataIntoString (models .GetHandshakeObject (client .authToken , int (client .counter .IncrementAndGet ())))
117+ client .socket .SendText ( handshake );
115118}
116119
117120func (client * Client ) ack (cid int ) func (error interface {}, data interface {}) {
118121 return func (error interface {}, data interface {}) {
119122 ackObject := models .GetReceiveEventObject (data , error , cid );
120- ackData := utils .SerializeData (ackObject )
121- client .socket .Send ( utils . CreateMessageFromByte ( ackData ) );
123+ ackData := utils .SerializeDataIntoString (ackObject )
124+ client .socket .SendText ( ackData );
122125 }
123126}
124127
125128func (client * Client ) Emit (eventName string , data interface {}) {
126129 emitObject := models .GetEmitEventObject (eventName , data , int (client .counter .IncrementAndGet ()))
127- emitData := utils .SerializeData (emitObject )
128- client .socket .Send ( utils . CreateMessageFromByte ( emitData ) );
130+ emitData := utils .SerializeDataIntoString (emitObject )
131+ client .socket .SendText ( emitData );
129132}
130133
131134func (client * Client ) EmitAck (eventName string , data interface {}, ack func (eventName string , error interface {}, data interface {})) {
132135 id := int (client .counter .IncrementAndGet ())
133136 emitObject := models .GetEmitEventObject (eventName , data , id )
134- emitData := utils .SerializeData (emitObject )
137+ emitData := utils .SerializeDataIntoString (emitObject )
135138 client .putEmitAck (id , eventName , ack )
136- client .socket .Send ( utils . CreateMessageFromByte ( emitData ) );
139+ client .socket .SendText ( emitData );
137140}
138141
139142func (client * Client ) Subscribe (channelName string ) {
140143 subscribeObject := models .GetSubscribeEventObject (channelName , int (client .counter .IncrementAndGet ()))
141- subscribeData := utils .SerializeData (subscribeObject )
142- client .socket .Send ( utils . CreateMessageFromByte ( subscribeData ) );
144+ subscribeData := utils .SerializeDataIntoString (subscribeObject )
145+ client .socket .SendText ( subscribeData );
143146}
144147
145148func (client * Client ) SubscribeAck (channelName string , ack func (eventName string , error interface {}, data interface {})) {
146149 id := int (client .counter .IncrementAndGet ())
147150 subscribeObject := models .GetSubscribeEventObject (channelName , id )
148- subscribeData := utils .SerializeData (subscribeObject )
151+ subscribeData := utils .SerializeDataIntoString (subscribeObject )
149152 client .putEmitAck (id , channelName , ack )
150- client .socket .Send ( utils . CreateMessageFromByte ( subscribeData ) );
153+ client .socket .SendText ( subscribeData );
151154}
152155
153156func (client * Client ) Unsubscribe (channelName string ) {
154157 unsubscribeObject := models .GetUnsubscribeEventObject (channelName , int (client .counter .IncrementAndGet ()))
155- unsubscribeData := utils .SerializeData (unsubscribeObject )
156- client .socket .Send ( utils . CreateMessageFromByte ( unsubscribeData ) );
158+ unsubscribeData := utils .SerializeDataIntoString (unsubscribeObject )
159+ client .socket .SendText ( unsubscribeData );
157160}
158161
159162func (client * Client ) UnsubscribeAck (channelName string , ack func (eventName string , error interface {}, data interface {})) {
160163 id := int (client .counter .IncrementAndGet ())
161164 unsubscribeObject := models .GetUnsubscribeEventObject (channelName , id )
162- unsubscribeData := utils .SerializeData (unsubscribeObject )
165+ unsubscribeData := utils .SerializeDataIntoString (unsubscribeObject )
163166 client .putEmitAck (id , channelName , ack )
164- client .socket .Send ( utils . CreateMessageFromByte ( unsubscribeData ) );
167+ client .socket .SendText ( unsubscribeData );
165168}
166169
167170func (client * Client ) Publish (channelName string , data interface {}) {
168171 publishObject := models .GetPublishEventObject (channelName , data , int (client .counter .IncrementAndGet ()))
169- publishData := utils .SerializeData (publishObject )
170- client .socket .Send ( utils . CreateMessageFromByte ( publishData ) );
172+ publishData := utils .SerializeDataIntoString (publishObject )
173+ client .socket .SendText ( publishData );
171174}
172175
173176func (client * Client ) PublishAck (channelName string , data interface {}, ack func (eventName string , error interface {}, data interface {})) {
174177 id := int (client .counter .IncrementAndGet ())
175178 publishObject := models .GetPublishEventObject (channelName , data , id )
176- publishData := utils .SerializeData (publishObject )
179+ publishData := utils .SerializeDataIntoString (publishObject )
177180 client .putEmitAck (id , channelName , ack )
178- client .socket .Send ( utils . CreateMessageFromByte ( publishData ) );
181+ client .socket .SendText ( publishData );
179182}
180183
181184func (client * Client ) OnChannel (eventName string , ack func (eventName string , data interface {})) {
0 commit comments