Files
Electron.NET/ElectronNET.API/SocketIO/Messages/MessageFactory.cs
2022-07-14 16:53:54 +02:00

76 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
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;
}
private static readonly Dictionary<string, MessageType> _messageTypes = Enum.GetValues<MessageType>().ToDictionary(v => ((int)v).ToString(), v => v);
public static IMessage CreateMessage(int eio, string msg)
{
foreach (var (prefix,item) in _messageTypes)
{
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;
}
}
}