You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.8 KiB
152 lines
4.8 KiB
8 months ago
|
#if !BESTHTTP_DISABLE_SOCKETIO
|
||
|
|
||
|
namespace BestHTTP.SocketIO3
|
||
|
{
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
using BestHTTP.PlatformSupport.Memory;
|
||
|
using BestHTTP.SocketIO3.Events;
|
||
|
|
||
|
public struct OutgoingPacket
|
||
|
{
|
||
|
public bool IsBinary { get { return string.IsNullOrEmpty(this.Payload); } }
|
||
|
|
||
|
public string Payload { get; set; }
|
||
|
public List<byte[]> Attachements { get; set; }
|
||
|
|
||
|
public BufferSegment PayloadData { get; set; }
|
||
|
|
||
|
public bool IsVolatile { get; set; }
|
||
|
|
||
|
public override string ToString()
|
||
|
{
|
||
|
if (!string.IsNullOrEmpty(this.Payload))
|
||
|
return this.Payload;
|
||
|
else
|
||
|
return this.PayloadData.ToString();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public struct IncomingPacket
|
||
|
{
|
||
|
public static readonly IncomingPacket Empty = new IncomingPacket(TransportEventTypes.Unknown, SocketIOEventTypes.Unknown, null, -1);
|
||
|
|
||
|
/// <summary>
|
||
|
/// Event type of this packet on the transport layer.
|
||
|
/// </summary>
|
||
|
public TransportEventTypes TransportEvent { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The packet's type in the Socket.IO protocol.
|
||
|
/// </summary>
|
||
|
public SocketIOEventTypes SocketIOEvent { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The internal ack-id of this packet.
|
||
|
/// </summary>
|
||
|
public int Id { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The sender namespace's name.
|
||
|
/// </summary>
|
||
|
public string Namespace { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Count of binary data expected after the current packet.
|
||
|
/// </summary>
|
||
|
public int AttachementCount { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// list of binary data received.
|
||
|
/// </summary>
|
||
|
public List<BufferSegment> Attachements { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The decoded event name from the payload string.
|
||
|
/// </summary>
|
||
|
public string EventName { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The decoded arguments by the parser.
|
||
|
/// </summary>
|
||
|
public object[] DecodedArgs { get; set; }
|
||
|
|
||
|
public object DecodedArg { get; set; }
|
||
|
|
||
|
public IncomingPacket(TransportEventTypes transportEvent, SocketIOEventTypes packetType, string nsp, int id)
|
||
|
{
|
||
|
this.TransportEvent = transportEvent;
|
||
|
this.SocketIOEvent = packetType;
|
||
|
this.Namespace = nsp;
|
||
|
this.Id = id;
|
||
|
|
||
|
this.AttachementCount = 0;
|
||
|
//this.ReceivedAttachements = 0;
|
||
|
this.Attachements = null;
|
||
|
|
||
|
if (this.SocketIOEvent != SocketIOEventTypes.Unknown)
|
||
|
this.EventName = EventNames.GetNameFor(this.SocketIOEvent);
|
||
|
else
|
||
|
this.EventName = EventNames.GetNameFor(this.TransportEvent);
|
||
|
|
||
|
this.DecodedArg = this.DecodedArgs = null;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Returns with the Payload of this packet.
|
||
|
/// </summary>
|
||
|
public override string ToString()
|
||
|
{
|
||
|
return string.Format("[Packet {0}{1}/{2},{3}[{4}]]", this.TransportEvent, this.SocketIOEvent, this.Namespace, this.Id, this.EventName);
|
||
|
}
|
||
|
|
||
|
public override bool Equals(object obj)
|
||
|
{
|
||
|
if (obj is IncomingPacket)
|
||
|
return Equals((IncomingPacket)obj);
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public bool Equals(IncomingPacket packet)
|
||
|
{
|
||
|
return this.TransportEvent == packet.TransportEvent &&
|
||
|
this.SocketIOEvent == packet.SocketIOEvent &&
|
||
|
this.Id == packet.Id &&
|
||
|
this.Namespace == packet.Namespace &&
|
||
|
this.EventName == packet.EventName &&
|
||
|
this.DecodedArg == packet.DecodedArg &&
|
||
|
this.DecodedArgs == packet.DecodedArgs;
|
||
|
}
|
||
|
|
||
|
public override int GetHashCode()
|
||
|
{
|
||
|
int hashCode = -1860921451;
|
||
|
hashCode = hashCode * -1521134295 + TransportEvent.GetHashCode();
|
||
|
hashCode = hashCode * -1521134295 + SocketIOEvent.GetHashCode();
|
||
|
hashCode = hashCode * -1521134295 + Id.GetHashCode();
|
||
|
|
||
|
if (Namespace != null)
|
||
|
hashCode = hashCode * -1521134295 + Namespace.GetHashCode();
|
||
|
|
||
|
if (EventName != null)
|
||
|
hashCode = hashCode * -1521134295 + EventName.GetHashCode();
|
||
|
|
||
|
if (DecodedArgs != null)
|
||
|
hashCode = hashCode * -1521134295 + DecodedArgs.GetHashCode();
|
||
|
|
||
|
if (DecodedArg != null)
|
||
|
hashCode = hashCode * -1521134295 + DecodedArg.GetHashCode();
|
||
|
|
||
|
return hashCode;
|
||
|
}
|
||
|
|
||
|
public static string GenerateAcknowledgementNameFromId(int id)
|
||
|
{
|
||
|
return string.Concat("Generated Callback Name for Id: ##", id.ToString(), "##");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|