public static AckMessage Deserialize(string rawMessage) { AckMessage msg = new AckMessage(); msg.RawMessage = rawMessage; string askId = rawMessage.Substring(2, rawMessage.IndexOf("[") - 2); int id; if (int.TryParse(askId, out id)) { msg.AckId = id; } var groups = new Regex(@"\[([\s\S]*)\]", RegexOptions.IgnoreCase | RegexOptions.Compiled).Match(rawMessage).Groups; msg.RawMessage = groups[0].Value.Replace("\\", ""); //jsonMsg.Event = groups[1].Value; msg.MessageText = groups[1].Value.Replace("\\", "").Trim('"'); return(msg); }
public static IMessage Factory(string rawMessage) { if (Check(rawMessage)) { string message = rawMessage.TrimStart('0'); return(ConnectMessage.Deserialize(message)); } 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()); } } if (rawMessage.IndexOf("[") > 0) { // int index = rawMessage.IndexOf("["); return(AckMessage.Deserialize(rawMessage)); } //if (rawMessage == "3") //{ // return new Heartbeat(); //} else { Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage)); return(new NoopMessage()); } }