using Newtonsoft.Json.Linq;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using Quobject.EngineIoClientDotNet.Modules;
using Quobject.SocketIoClientDotNet.Client;
using System;
using System.Collections.Generic;
using System.Text;
namespace Quobject.SocketIoClientDotNet.Parser
{
public class Parser
{
public const int CONNECT = 0;
public const int DISCONNECT = 1;
public const int EVENT = 2;
public const int ACK = 3;
public const int ERROR = 4;
public const int BINARY_EVENT = 5;
public const int BINARY_ACK = 6;
public const int protocol = 4;
///
/// Packet types
///
public static List types = new List()
{
"CONNECT",
"DISCONNECT",
"EVENT",
"BINARY_EVENT",
"ACK",
"BINARY_ACK",
"ERROR"
};
private Parser() { }
private static Packet ErrorPacket = new Packet(ERROR, "parser error");
public class Encoder
{
public Encoder() { }
public interface ICallback
{
void Call(object[] data);
}
public void Encode(Packet obj, ICallback callback)
{
var log = LogManager.GetLogger(Global.CallerName());
log.Info(string.Format("encoding packet {0}", obj));
if (BINARY_EVENT == obj.Type || BINARY_ACK == obj.Type)
{
EncodeAsBinary(obj, callback);
}
else
{
String encoding = EncodeAsString(obj);
callback.Call(new object[] { encoding });
}
}
private string EncodeAsString(Packet obj)
{
var str = new StringBuilder();
bool nsp = false;
str.Append(obj.Type);
if (BINARY_EVENT == obj.Type || BINARY_ACK == obj.Type)
{
str.Append(obj.Attachments);
str.Append("-");
}
if (!string.IsNullOrEmpty(obj.Nsp) && !"/".Equals(obj.Nsp))
{
nsp = true;
str.Append(obj.Nsp);
}
if (obj.Id >= 0)
{
if (nsp)
{
str.Append(",");
nsp = false;
}
str.Append(obj.Id);
}
if (obj.Data != null)
{
if (nsp) str.Append(",");
str.Append(obj.Data);
}
var log = LogManager.GetLogger(Global.CallerName());
log.Info(string.Format("encoded {0} as {1}", obj, str));
return str.ToString();
}
private void EncodeAsBinary(Packet obj, ICallback callback)
{
Binary.DeconstructedPacket deconstruction = Binary.DeconstructPacket(obj);
String pack = EncodeAsString(deconstruction.Packet);
var buffers = new List