コード例 #1
0
ファイル: PlayerRpc.cs プロジェクト: bigstupidx/Motor
 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);
 }
コード例 #2
0
ファイル: PlayerRpc.cs プロジェクト: bigstupidx/Motor
 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);
 }
コード例 #3
0
        public ICommand OnReceiveCommand(object session, Stream stream)
        {
            object commandKey = SerializableTypeRegister.Deserialize(stream);
            var    command    = GetCommand(commandKey);

            command.OnReceive(session, stream);
            return(command);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: TypeRegister.cs プロジェクト: bigstupidx/Motor
        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);
            });
        }
コード例 #6
0
ファイル: GameRoom.cs プロジェクト: bigstupidx/Motor
 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
     });
 }
コード例 #7
0
        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);
        }
コード例 #8
0
 public override void OnSend(Stream stream)
 {
     ProtocolParser.WriteString(stream, Request.Id);
     SerializableTypeRegister.Serialize(ReplyCommand.Key, stream);
     ReplyCommand.OnSend(stream);
 }
コード例 #9
0
ファイル: StreamExtensions.cs プロジェクト: bigstupidx/Motor
 public static T ReadObject <T>(this Stream stream)
 {
     return(SerializableTypeRegister.Deserialize <T>(stream));
 }
コード例 #10
0
ファイル: StreamExtensions.cs プロジェクト: bigstupidx/Motor
 public static void WriteObject(this Stream stream, object obj)
 {
     SerializableTypeRegister.Serialize(obj, stream);
 }
コード例 #11
0
ファイル: ViewUpdate.cs プロジェクト: bigstupidx/Motor
 public override void OnReceive(ToRoomClient session, Stream stream)
 {
     this.ViewAndObjects = SerializableTypeRegister.Deserialize <Dictionary <object, object> >(stream);
 }
コード例 #12
0
ファイル: ViewUpdate.cs プロジェクト: bigstupidx/Motor
 public override void OnSend(Stream stream)
 {
     SerializableTypeRegister.Serialize(this.ViewAndObjects, stream);
 }
コード例 #13
0
 public void WriteToStream(Stream stream)
 {
     SerializableTypeRegister.Serialize(Key, stream);
     OnSend(stream);
 }