public static Deserialize ( string rawMessage ) : |
||
rawMessage | string | |
return |
public static EventMessage Deserialize(string rawMessage)
{
EventMessage evtMsg = new EventMessage();
// '5:' [message id ('+')] ':' [message endpoint] ':' [json encoded event]
// 5:1::{"a":"b"}
evtMsg.RawMessage = rawMessage;
try
{
string[] args = rawMessage.Split(SPLITCHARS, 4); // limit the number of pieces
if (args.Length == 4)
{
int id;
if (int.TryParse(args[1], out id))
evtMsg.AckId = id;
evtMsg.Endpoint = args[2];
evtMsg.MessageText = args[3];
if (!string.IsNullOrEmpty(evtMsg.MessageText) &&
evtMsg.MessageText.Contains("name") &&
evtMsg.MessageText.Contains("args"))
{
evtMsg.Json = JsonEncodedEventMessage.Deserialize(evtMsg.MessageText);
evtMsg.Event = evtMsg.Json.name;
}
else
evtMsg.Json = new JsonEncodedEventMessage();
}
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
return evtMsg;
}
public static IMessage Factory(string rawMessage) { if (reMessageType.IsMatch(rawMessage)) { char id = rawMessage.First(); switch (id) { case '0': return(DisconnectMessage.Deserialize(rawMessage)); case '1': return(ConnectMessage.Deserialize(rawMessage)); case '2': return(new Heartbeat()); case '3': return(TextMessage.Deserialize(rawMessage)); case '4': return(JSONMessage.Deserialize(rawMessage)); case '5': return(EventMessage.Deserialize(rawMessage)); case '6': return(AckMessage.Deserialize(rawMessage)); case '7': return(ErrorMessage.Deserialize(rawMessage)); case '8': return(new NoopMessage()); default: Trace.WriteLine(string.Format("Message.Factory undetermined message: {0}", rawMessage)); return(new TextMessage()); } } else { Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage)); return(new NoopMessage()); } }