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; } }); }
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()); } }