Skip to content

Commit 734d202

Browse files
authored
Merge pull request #5 from sacOO7/feature/gowebsocket-integration
Feature/gowebsocket integration
2 parents 38e51ac + a73ab33 commit 734d202

File tree

3 files changed

+93
-80
lines changed

3 files changed

+93
-80
lines changed

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func onAuthentication(client scclient.Client, isAuthenticated bool) {
3434

3535
func main() {
3636
var reader scanner.Scanner
37-
client := scclient.New("ws://192.168.100.11:8000/socketcluster/");
37+
client := scclient.New("ws://192.168.100.14:8000/socketcluster/");
3838
client.SetBasicListener(onConnect, onConnectError, onDisconnect)
3939
client.SetAuthenticationListener(onSetAuthentication, onAuthentication)
4040
go client.Connect()

scclient/client.go

Lines changed: 82 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ package scclient
33
import (
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

1313
type 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

4141
func (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

101108
func (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

112115
func (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

117120
func (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

125128
func (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

131134
func (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

139142
func (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

145148
func (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

153156
func (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

159162
func (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

167170
func (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

173176
func (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

181184
func (client *Client) OnChannel(eventName string, ack func(eventName string, data interface{})) {

scclient/utils/miscellaneous.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,17 @@ func SerializeData(data interface{}) [] byte {
3939
return b;
4040
}
4141

42+
func SerializeDataIntoString(data interface{}) string {
43+
b, _ := json.Marshal(data)
44+
return string(b);
45+
}
46+
4247
func DeserializeData(data [] byte) (jsonObject interface{}) {
4348
json.Unmarshal(data, &jsonObject)
4449
return
4550
}
51+
52+
func DeserializeDataFromString(data string) (jsonObject interface{}) {
53+
json.Unmarshal([] byte(data), &jsonObject)
54+
return
55+
}

0 commit comments

Comments
 (0)