public static ConnectMessage Deserialize(string rawMessage) { ConnectMessage msg = new ConnectMessage(); // 1:: [path] [query] // 1::/test?my=param msg.RawMessage = rawMessage; string[] args = rawMessage.Split(SPLITCHARS, 3); if (args.Length == 3) { string[] pq = args[2].Split(new char[] { '?' }); if (pq.Length > 0) msg.Endpoint = pq[0]; if (pq.Length > 1) msg.Query = pq[1]; } 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()); } }