Files
Electron.NET/SocketIOClient/Messages/MessageFactory.cs

75 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace SocketIOClient.Messages
{
public static class MessageFactory
{
private static IMessage CreateMessage(MessageType type)
{
switch (type)
{
case MessageType.Opened:
return new OpenedMessage();
case MessageType.Ping:
return new PingMessage();
case MessageType.Pong:
return new PongMessage();
case MessageType.Connected:
return new ConnectedMessage();
case MessageType.Disconnected:
return new DisconnectedMessage();
case MessageType.EventMessage:
return new EventMessage();
case MessageType.AckMessage:
return new ClientAckMessage();
case MessageType.ErrorMessage:
return new ErrorMessage();
case MessageType.BinaryMessage:
return new BinaryMessage();
case MessageType.BinaryAckMessage:
return new ClientBinaryAckMessage();
}
return null;
}
public static IMessage CreateMessage(int eio, string msg)
{
var enums = Enum.GetValues(typeof(MessageType));
foreach (MessageType item in enums)
{
string prefix = ((int)item).ToString();
if (msg.StartsWith(prefix))
{
IMessage result = CreateMessage(item);
if (result != null)
{
result.Eio = eio;
result.Read(msg.Substring(prefix.Length));
return result;
}
}
}
return null;
}
public static OpenedMessage CreateOpenedMessage(string msg)
{
var openedMessage = new OpenedMessage();
if (msg[0] == '0')
{
openedMessage.Eio = 4;
openedMessage.Read(msg.Substring(1));
}
else
{
openedMessage.Eio = 3;
int index = msg.IndexOf(':');
openedMessage.Read(msg.Substring(index + 2));
}
return openedMessage;
}
}
}