Example #1
0
        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;
            }
        }
Example #2
0
        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));
            }
        }