diff --git a/Assets/Plugins/socket.io/Socket.cs b/Assets/Plugins/socket.io/Socket.cs
index 4c4b370..0092e47 100644
--- a/Assets/Plugins/socket.io/Socket.cs
+++ b/Assets/Plugins/socket.io/Socket.cs
@@ -9,6 +9,8 @@ namespace socket.io {
///
public class Socket : MonoBehaviour {
+ public bool AllowReconnection { get; private set; }
+
///
/// Establishes a connection to a given url
///
@@ -18,7 +20,7 @@ public static Socket Connect(string url) {
var socket = new GameObject(string.Format("socket.io - {0}", url)).AddComponent();
socket.transform.SetParent(SocketManager.Instance.transform, false);
socket.Url = new Uri(url);
-
+ socket.AllowReconnection = true;
SocketManager.Instance.Connect(socket);
return socket;
}
@@ -274,6 +276,15 @@ public bool IsConnected {
}
}
+ public void Disconnect()
+ {
+ AllowReconnection = false;
+ if (IsConnected)
+ {
+ WebSocketTrigger.WebSocket.Close();
+ }
+ }
+
protected WebSocketTrigger WebSocketTrigger {
get {
if (_webSocketTrigger == null && transform.parent != null)
@@ -324,13 +335,23 @@ void DispatchPacket(Packet pkt) {
seperatorLen = 1;
}
+ var hasEventData = seperateIndex > -1;
+
+ if (!hasEventData) // Event without a payload?
+ {
+ seperateIndex = pkt.body.Length - 1;
+ }
var eventName = pkt.body.Substring(2, seperateIndex - 3);
if (!_handlers.ContainsKey(eventName)) {
Debug.LogWarningFormat("{0} event doesn't have a handler", eventName);
break;
}
- var data = pkt.body.Substring(seperateIndex + seperatorLen, pkt.body.Length - seperateIndex - seperatorLen - 1);
+ var data = hasEventData
+ ? pkt.body.Substring(seperateIndex + seperatorLen,
+ pkt.body.Length - seperateIndex - seperatorLen - 1)
+ : null;
+
_handlers[eventName](data);
break;
diff --git a/Assets/Plugins/socket.io/WebSocketTrigger.cs b/Assets/Plugins/socket.io/WebSocketTrigger.cs
index 5a44f58..ac4f4b9 100644
--- a/Assets/Plugins/socket.io/WebSocketTrigger.cs
+++ b/Assets/Plugins/socket.io/WebSocketTrigger.cs
@@ -123,7 +123,8 @@ void CheckAndHandleWebSocketDisconnect() {
if (SocketManager.Instance.Reconnection) {
var sockets = gameObject.GetComponentsInChildren();
foreach (var s in sockets)
- SocketManager.Instance.Reconnect(s, 1);
+ if (s.AllowReconnection)
+ SocketManager.Instance.Reconnect(s, 1);
}
}