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()); } }
public static JSONMessage Deserialize(string rawMessage) { JSONMessage jsonMsg = new JSONMessage(); // '4:' [message id ('+')] ':' [message endpoint] ':' [json] // 4:1::{"a":"b"} jsonMsg.RawMessage = rawMessage; string[] args = rawMessage.Split(SPLITCHARS, 4); // limit the number of ' if (args.Length == 4) { int id; if (int.TryParse(args[1], out id)) { jsonMsg.AckId = id; } jsonMsg.Endpoint = args[2]; jsonMsg.MessageText = args[3]; } return(jsonMsg); }