/// <summary> /// Creates a network message by decoding a NetMessage /// </summary> /// <param name="msg">The NetMessage to be decoded</param> public SpiderMessage(NetMessage msg) { //This is the exception we throw if something goes wrong Exception e = new Exception("Could not read message"); byte[] contents = msg.ReadBytes(msg.Length); type = (SpiderMessageType)contents[0]; int dataOffset = BitConverter.ToInt32(contents, 1); label = Encoding.UTF8.GetString(contents, 1 + sizeof(int), dataOffset - 1 - sizeof(int)); senderIP = msg.Sender.RemoteEndpoint.Address; connection = msg.Sender; if (type == SpiderMessageType.Bytes) { data = new byte[contents.Length - dataOffset]; for (int i = 0; i < contents.Length - dataOffset; i++) { ((byte[])data)[i] = contents[i + dataOffset]; } } else { String tempData = Encoding.UTF8.GetString(contents, dataOffset, contents.Length - dataOffset); switch (type) { case SpiderMessageType.Double: data = Convert.ToDouble(tempData); break; case SpiderMessageType.Int: data = Convert.ToInt32(tempData); break; default: data = tempData; break; } } }
/// <summary> /// Creates a new network message. Do not use pipes ('|') in any of the parameters. /// </summary> /// <param name="msgContents">The data to be stored in the message. Must have type msgType.</param> /// <param name="msgType">The type of msgContents</param> /// <param name="msgLabel">The label for this message</param> public SpiderMessage(object msgContents, SpiderMessageType msgType, String msgLabel) { data = msgContents; type = msgType; label = msgLabel; }