public override void OnSend(Stream stream) { ProtocolParser.WriteInt32(stream, (int)this.BroadcastType); ProtocolParser.WriteInt32(stream, this.PlayerId); ProtocolParser.WriteString(stream, this.MethodName); SerializableTypeRegister.Serialize(this.Args, stream); }
public override void OnReceive(ToRoomClient session, Stream stream) { this.BroadcastType = (BroadcastType)ProtocolParser.ReadInt32(stream); this.PlayerId = ProtocolParser.ReadInt32(stream); this.MethodName = ProtocolParser.ReadString(stream); this.Args = (object[])SerializableTypeRegister.Deserialize(stream); }
public ICommand OnReceiveCommand(object session, Stream stream) { object commandKey = SerializableTypeRegister.Deserialize(stream); var command = GetCommand(commandKey); command.OnReceive(session, stream); return(command); }
public static Dictionary <object, object> PropToBytesDict(Dictionary <object, object> originDict) { if (originDict == null) { return(new Dictionary <object, object>()); } MemoryStream tmpStream = new MemoryStream(); Dictionary <object, object> bytesDict = new Dictionary <object, object>(); //TODO 这里是简单实现,GC很大 foreach (var kv in originDict) { SerializableTypeRegister.Serialize(kv.Value, tmpStream); bytesDict.Add(kv.Key, tmpStream.ToArray()); tmpStream.Clean(); } return(bytesDict); }
static void Register() { SerializableTypeRegister.RegisterType(typeof(Vector3), (byte)SerilizeType.Vector3, Vector3SerializeFunction, Vector3DeserializeFunction); SerializableTypeRegister.RegisterType(typeof(Vector2), (byte)SerilizeType.Vector2, Vector2SerializeFunction, Vector2DeserializeFunction); SerializableTypeRegister.RegisterType(typeof(Quaternion), (byte)SerilizeType.Quaternion, QuaternionSerializeFunction, QuaternionDeserializeFunction); SerializableTypeRegister.RegisterType(typeof(HostPort), (byte)SerilizeType.HostPort, (stream, customObject) => { HostPort obj = (HostPort)customObject; obj.Serilize(stream); }, stream => { HostPort ret = new HostPort(); ret.Deserilize(stream); return(ret); }); SerializableTypeRegister.RegisterType(typeof(LobbyRoom), (int)SerilizeType.LobbyRoom, (stream, customObject) => { LobbyRoom obj = (LobbyRoom)customObject; obj.Serilize(stream); }, stream => { LobbyRoom ret = new LobbyRoom(); ret.Deserilize(stream); return(ret); }); SerializableTypeRegister.RegisterType(typeof(GameRoom), (int)SerilizeType.GameRoom, (stream, customObject) => { GameRoom obj = (GameRoom)customObject; obj.Serilize(stream); }, stream => { GameRoom ret = new GameRoom(); ret.Deserilize(stream); return(ret); }); SerializableTypeRegister.RegisterType(typeof(RoomPlayer), (int)SerilizeType.Player, (stream, customObject) => { RoomPlayer obj = (RoomPlayer)customObject; obj.Serilize(stream); }, stream => { RoomPlayer ret = new RoomPlayer(); ret.Deserilize(stream); return(ret); }); }
public void SetLobbyProp(Dictionary <object, object> changedPart) { foreach (var o in changedPart) { if (!SerializableTypeRegister.IsInternalType(o.Key.GetType())) { throw new ArgumentException(string.Format("Lobby Properties Only Support Internal Type ,{0} is not internal type", o.Key.GetType())); } if (o.Value != null && !SerializableTypeRegister.IsInternalType(o.Value.GetType())) { throw new ArgumentException(string.Format("Lobby Properties Only Support Internal Type ,{0} is not internal type", o.Value.GetType())); } } SetLobbyPropInternal(changedPart); this.Session.Send(new SetRoomLobbyProp() { ChangedPart = changedPart }); }
public static Dictionary <object, object> BytesDictToProp(Dictionary <object, object> bytesDict, bool allowNull = true) { if (bytesDict == null) { return(new Dictionary <object, object>()); } Dictionary <object, object> ret = new Dictionary <object, object>(); MemoryStream tmpStream = new MemoryStream(); foreach (var kv in bytesDict) { byte[] valueData = (byte[])kv.Value; tmpStream.Clean(); tmpStream.Write(valueData, 0, valueData.Length); //TODO 这里是简单实现,GC很大 tmpStream.Position = 0; object realValue = SerializableTypeRegister.Deserialize(tmpStream); if (allowNull || realValue != null) { ret.Add(kv.Key, realValue); } } return(ret); }
public override void OnSend(Stream stream) { ProtocolParser.WriteString(stream, Request.Id); SerializableTypeRegister.Serialize(ReplyCommand.Key, stream); ReplyCommand.OnSend(stream); }
public static T ReadObject <T>(this Stream stream) { return(SerializableTypeRegister.Deserialize <T>(stream)); }
public static void WriteObject(this Stream stream, object obj) { SerializableTypeRegister.Serialize(obj, stream); }
public override void OnReceive(ToRoomClient session, Stream stream) { this.ViewAndObjects = SerializableTypeRegister.Deserialize <Dictionary <object, object> >(stream); }
public override void OnSend(Stream stream) { SerializableTypeRegister.Serialize(this.ViewAndObjects, stream); }
public void WriteToStream(Stream stream) { SerializableTypeRegister.Serialize(Key, stream); OnSend(stream); }