up
This commit is contained in:
100
Assets/BestHTTP/SocketIO/HandshakeData.cs
Normal file
100
Assets/BestHTTP/SocketIO/HandshakeData.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
#if !BESTHTTP_DISABLE_SOCKETIO
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BestHTTP.SocketIO
|
||||
{
|
||||
using BestHTTP.JSON;
|
||||
|
||||
/// <summary>
|
||||
/// Helper class to parse and hold handshake information.
|
||||
/// </summary>
|
||||
public sealed class HandshakeData
|
||||
{
|
||||
#region Public Handshake Data
|
||||
|
||||
/// <summary>
|
||||
/// Session ID of this connection.
|
||||
/// </summary>
|
||||
public string Sid { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of possible upgrades.
|
||||
/// </summary>
|
||||
public List<string> Upgrades { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// What interval we have to set a ping message.
|
||||
/// </summary>
|
||||
public TimeSpan PingInterval { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// What time have to pass without an answer to our ping request when we can consider the connection disconnected.
|
||||
/// </summary>
|
||||
public TimeSpan PingTimeout { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
public bool Parse(string str)
|
||||
{
|
||||
bool success = false;
|
||||
Dictionary<string, object> dict = Json.Decode(str, ref success) as Dictionary<string, object>;
|
||||
if (!success)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
this.Sid = GetString(dict, "sid");
|
||||
this.Upgrades = GetStringList(dict, "upgrades");
|
||||
this.PingInterval = TimeSpan.FromMilliseconds(GetInt(dict, "pingInterval"));
|
||||
this.PingTimeout = TimeSpan.FromMilliseconds(GetInt(dict, "pingTimeout"));
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static object Get(Dictionary<string, object> from, string key)
|
||||
{
|
||||
object value;
|
||||
if (!from.TryGetValue(key, out value))
|
||||
throw new System.Exception(string.Format("Can't get {0} from Handshake data!", key));
|
||||
return value;
|
||||
}
|
||||
|
||||
private static string GetString(Dictionary<string, object> from, string key)
|
||||
{
|
||||
return Get(from, key) as string;
|
||||
}
|
||||
|
||||
private static List<string> GetStringList(Dictionary<string, object> from, string key)
|
||||
{
|
||||
List<object> value = Get(from, key) as List<object>;
|
||||
|
||||
List<string> result = new List<string>(value.Count);
|
||||
for (int i = 0; i < value.Count; ++i)
|
||||
{
|
||||
string str = value[i] as string;
|
||||
if (str != null)
|
||||
result.Add(str);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int GetInt(Dictionary<string, object> from, string key)
|
||||
{
|
||||
return (int)(double)Get(from, key);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user