Skip to content

Commit 212cade

Browse files
committed
a safer way to get pingInterval and pingTimeout
1 parent 589e18e commit 212cade

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

src/SocketIOClient.UnitTest/MessageTests/MessageFactoryTest.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace SocketIOClient.UnitTest.MessageTests
77
public class MessageFactoryTest
88
{
99
[TestMethod]
10-
public void CreateEio3OpenedMessage()
10+
public void CreateEio3HttpOpenedMessage()
1111
{
1212
var msg = MessageFactory.CreateOpenedMessage("97:0{\"sid\":\"wOuAvDB9Jj6yE0VrAL8N\",\"upgrades\":[\"websocket\"],\"pingInterval\":25000,\"pingTimeout\":30000}");
1313
Assert.AreEqual(MessageType.Opened, msg.Type);
@@ -19,6 +19,19 @@ public void CreateEio3OpenedMessage()
1919
Assert.AreEqual("websocket", msg.Upgrades[0]);
2020
}
2121

22+
[TestMethod]
23+
public void CreateEio3HttpOpenedMessageWithQuote()
24+
{
25+
var msg = MessageFactory.CreateOpenedMessage("97:0{\"sid\":\"wOuAvDB9Jj6yE0VrAL8N\",\"upgrades\":[\"websocket\"],\"pingInterval\":\"26000\",\"pingTimeout\":\"31000\"}");
26+
Assert.AreEqual(MessageType.Opened, msg.Type);
27+
Assert.AreEqual("wOuAvDB9Jj6yE0VrAL8N", msg.Sid);
28+
Assert.AreEqual(26000, msg.PingInterval);
29+
Assert.AreEqual(31000, msg.PingTimeout);
30+
Assert.AreEqual(3, msg.Eio);
31+
Assert.AreEqual(1, msg.Upgrades.Count);
32+
Assert.AreEqual("websocket", msg.Upgrades[0]);
33+
}
34+
2235
[TestMethod]
2336
public void CreateEio4OpenedMessage()
2437
{
@@ -30,5 +43,17 @@ public void CreateEio4OpenedMessage()
3043
Assert.AreEqual(4, msg.Eio);
3144
Assert.AreEqual(0, msg.Upgrades.Count);
3245
}
46+
47+
[TestMethod]
48+
public void CreateEio4OpenedMessageWithQuote()
49+
{
50+
var msg = MessageFactory.CreateOpenedMessage("0{\"sid\":\"6lV4Ef7YOyGF-5dCBvKy\",\"upgrades\":[],\"pingInterval\":\"20000\",\"pingTimeout\":\"6000\"}");
51+
Assert.AreEqual(MessageType.Opened, msg.Type);
52+
Assert.AreEqual("6lV4Ef7YOyGF-5dCBvKy", msg.Sid);
53+
Assert.AreEqual(20000, msg.PingInterval);
54+
Assert.AreEqual(6000, msg.PingTimeout);
55+
Assert.AreEqual(4, msg.Eio);
56+
Assert.AreEqual(0, msg.Upgrades.Count);
57+
}
3358
}
3459
}

src/SocketIOClient/Messages/OpenedMessage.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,33 @@ public class OpenedMessage : IMessage
2929

3030
public TransportProtocol Protocol { get; set; }
3131

32+
private int GetInt32FromJsonElement(JsonElement element, string msg, string name)
33+
{
34+
var p = element.GetProperty(name);
35+
int val;
36+
switch (p.ValueKind)
37+
{
38+
case JsonValueKind.String:
39+
val = int.Parse(p.GetString());
40+
break;
41+
case JsonValueKind.Number:
42+
val = p.GetInt32();
43+
break;
44+
default:
45+
throw new ArgumentException($"Invalid message: '{msg}'");
46+
}
47+
return val;
48+
}
49+
3250
public void Read(string msg)
3351
{
3452
var doc = JsonDocument.Parse(msg);
3553
var root = doc.RootElement;
3654
Sid = root.GetProperty("sid").GetString();
37-
PingInterval = root.GetProperty("pingInterval").GetInt32();
38-
PingTimeout = root.GetProperty("pingTimeout").GetInt32();
55+
56+
PingInterval = GetInt32FromJsonElement(root, msg, "pingInterval");
57+
PingTimeout = GetInt32FromJsonElement(root, msg, "pingTimeout");
58+
3959
Upgrades = new List<string>();
4060
var upgrades = root.GetProperty("upgrades").EnumerateArray();
4161
foreach (var item in upgrades)

0 commit comments

Comments
 (0)