private void ParseMessageHandler() { this.serializerHandlerByMessageId = new Dictionary <int, Action <MemoryStream> >(); foreach (var mi in messageHandler.GetType() .GetMethods(BindingFlags.Instance | BindingFlags.Public) .Where(IsValidMessageHandlerMethod)) { var paramType = mi.GetParameters()[1].ParameterType; messageIdCache.PreLoadType(paramType); var serializer = CreateSerializerForType(paramType, mi); this.serializerHandlerByMessageId[messageIdCache.GetMessageId(paramType)] = serializer; } }
public unsafe void Send <T>(T obj) { var messageId = messageIdCache.GetMessageId <T>(); using (var ms = new MemoryStream()) { ms.SetLength(4); ms.Position = 4; this.packetSerializer.Serialize(obj, ms); ms.Position = 0; var buffer = ms.GetBuffer(); fixed(byte *buf = buffer) { int *iBuf = (int *)buf; *iBuf = messageId; } this.framedClient.SendPacket(new ArraySegment <byte>(buffer, 0, (int)ms.Length)); } }