예제 #1
0
        public void Dispatch(IExtensible obj)
        {
            var      msgId = obj.MsgId();
            TypeInfo info  = null;

            if (!msgTypes.TryGetValue(msgId, out info))
            {
                return;
            }

            if (info.handlers.Count == 0)
            {
                return;
            }

            var args = new object[] { obj };

            info.handlers.ForEach(hcb =>
            {
                try
                {
                    hcb.method.Invoke(hcb.handler, args);
                }
                catch (Exception e)
                {
                    throw;
                }
            });
        }
예제 #2
0
        public static byte[] Serialize(IExtensible msg)
        {
            var msgId = msg.MsgId();
            var head  = BitConverter.GetBytes(msgId);

            using (var mem = new MemoryStream())
            {
                mem.Write(head, 0, 4);
                RuntimeTypeModel.Default.Serialize(mem, msg);
                var len = (int)mem.Length;
                return(mem.GetBuffer().Take(len).ToArray());
            }
        }