public NetworkMessage Clone() { MsgPackSerializer.SerializeObject(this, cloneBuffer, 0); var result = (NetworkMessage)(GetType().GetConstructor(Type.EmptyTypes).Invoke(emptyArgs)); MsgPackSerializer.DeserializeObject(result, cloneBuffer, 0); result.SequenceNumber = SequenceNumber; result.Source = Source; result.Id = Id; return(result); }
internal NetworkMessage Read(byte[] buffer) { int offset = 1; var result = messages[buffer[0]]; if (result.IsGuaranteed) { result.SequenceNumber = (ushort)(buffer[1] + (buffer[2] << 8)); offset = 3; } MsgPackSerializer.DeserializeObject(result, buffer, offset); return(result); }
public LimeMessage?read(byte[] buffer) { int offset = 1; var result = messages[buffer[0]]; // get matching instance try { MsgPackSerializer.DeserializeObject(result, buffer, offset); return(result); } catch (Exception e) { return(null); } }
internal IEnumerable <NetworkMessage> Read(byte[] buffer, int length) { int overallOffset = 0; while (overallOffset < length) { int offset = 1; var result = messages[buffer[overallOffset]]; if (result.IsGuaranteed) { result.SequenceNumber = (ushort)((buffer[overallOffset + 1]) + (buffer[overallOffset + 2] << 8)); offset = 3; } overallOffset = MsgPackSerializer.DeserializeObject(result, buffer, overallOffset + offset); yield return(result); } }
private void BuildInstances(Assembly messageAssembly) { Type networkMsgType = typeof(NetworkMessage); foreach (Type t in messageAssembly.GetTypes()) { if (t.IsSubclassOf(networkMsgType) && !messagesByType.ContainsKey(t)) { if (messages.Count == Byte.MaxValue) { throw new ApplicationException("The maximum number of network messages has been reached - you need to use fewer message types in this project"); } var msg = (NetworkMessage)t.GetConstructor(Type.EmptyTypes).Invoke(Utility.emptyArgs); MsgPackSerializer.SerializeObject(msg, NetworkMessage.cloneBuffer, 0); MsgPackSerializer.DeserializeObject(msg, NetworkMessage.cloneBuffer, 0); msg.Id = (byte)messages.Count; messages[msg.Id] = msg; messagesByType[msg.GetType()] = msg; NeutrinoConfig.Log("Registered message type " + msg.GetType() + " as Id " + msg.Id); } } }