Пример #1
0
        public static SkirmishSlot Deserialize(NetDataReader reader)
        {
            var slot = new SkirmishSlot(reader.GetInt())
            {
                State         = (SkirmishSlotState)reader.GetByte(),
                ColorIndex    = reader.GetSByte(),
                FactionIndex  = reader.GetByte(),
                Team          = reader.GetSByte(),
                StartPosition = reader.GetByte(),
            };

            if (slot.State == SkirmishSlotState.Human)
            {
                slot.ClientId   = reader.GetString();
                slot.PlayerName = reader.GetString();
                slot.EndPoint   = reader.GetNetEndPoint();
            }

            return(slot);
        }
Пример #2
0
        public void WriteReadSByte()
        {
            var ndw = new NetDataWriter();

            ndw.Put((sbyte)8);

            var ndr       = new NetDataReader(ndw.Data);
            var readSByte = ndr.GetSByte();

            Assert.AreEqual(readSByte, (sbyte)8);
        }
 public void Deserialize(NetDataReader reader)
 {
     x = reader.GetSByte();
     y = reader.GetSByte();
 }
        private static object GetObject(this NetDataReader reader, Type type)
        {
            if (type == null)
            {
                return(null);
            }

            if (type.GetInterface("INetSerializable") != null)
            {
                var result = (INetSerializable)Activator.CreateInstance(type);
                result.Deserialize(reader);
                return(result);
            }
            else if (type.GetInterface("ISyncObject") != null)
            {
                return(reader.GetByte());
            }
            else if (type.IsEnum)
            {
                return(Enum.Parse(type, type.GetEnumName(reader.GetObject(type.GetEnumUnderlyingType()))));
            }
            else if (type == typeof(bool))
            {
                return(reader.GetBool());
            }
            else if (type == typeof(byte))
            {
                return(reader.GetByte());
            }
            else if (type == typeof(sbyte))
            {
                return(reader.GetSByte());
            }
            else if (type == typeof(char))
            {
                return(reader.GetChar());
            }
            else if (type == typeof(short))
            {
                return(reader.GetShort());
            }
            else if (type == typeof(ushort))
            {
                return(reader.GetUShort());
            }
            else if (type == typeof(int))
            {
                return(reader.GetInt());
            }
            else if (type == typeof(uint))
            {
                return(reader.GetUInt());
            }
            else if (type == typeof(long))
            {
                return(reader.GetLong());
            }
            else if (type == typeof(ulong))
            {
                return(reader.GetULong());
            }
            else if (type == typeof(float))
            {
                return(reader.GetFloat());
            }
            else if (type == typeof(double))
            {
                return(reader.GetBool());
            }
            else if (type == typeof(string))
            {
                return(reader.GetDouble());
            }
            else if (type == typeof(IPEndPoint))
            {
                return(reader.GetNetEndPoint());
            }
            else
            {
                throw new Exception("Unable to deserialize object of type " + type);
            }
        }
Пример #5
0
        /// <inheritdoc />
        public virtual void TinyDeserialize(NetDataReader reader, bool firstStateUpdate)
        {
            if (firstStateUpdate)
            {
                NetworkID = reader.GetInt();
            }

            if (!firstStateUpdate)
            {
                int dFlag = reader.GetInt();

                TinyNetStateSyncer.IntToDirtyFlag(dFlag, _dirtyFlag);
            }

            Type type;
            int  maxSyncVar = propertiesName.Length;

            for (int i = 0; i < maxSyncVar; i++)
            {
                if (!firstStateUpdate && _dirtyFlag[i] == false)
                {
                    continue;
                }

                type = propertiesTypes[i];

                if (type == typeof(byte))
                {
                    byteAccessor[propertiesName[i]].Set(this, reader.GetByte());
                }
                else if (type == typeof(sbyte))
                {
                    sbyteAccessor[propertiesName[i]].Set(this, reader.GetSByte());
                }
                else if (type == typeof(short))
                {
                    shortAccessor[propertiesName[i]].Set(this, reader.GetShort());
                }
                else if (type == typeof(ushort))
                {
                    ushortAccessor[propertiesName[i]].Set(this, reader.GetUShort());
                }
                else if (type == typeof(int))
                {
                    intAccessor[propertiesName[i]].Set(this, reader.GetInt());
                }
                else if (type == typeof(uint))
                {
                    uintAccessor[propertiesName[i]].Set(this, reader.GetUInt());
                }
                else if (type == typeof(long))
                {
                    longAccessor[propertiesName[i]].Set(this, reader.GetLong());
                }
                else if (type == typeof(ulong))
                {
                    ulongAccessor[propertiesName[i]].Set(this, reader.GetULong());
                }
                else if (type == typeof(float))
                {
                    floatAccessor[propertiesName[i]].Set(this, reader.GetFloat());
                }
                else if (type == typeof(double))
                {
                    doubleAccessor[propertiesName[i]].Set(this, reader.GetDouble());
                }
                else if (type == typeof(bool))
                {
                    boolAccessor[propertiesName[i]].Set(this, reader.GetBool());
                }
                else if (type == typeof(string))
                {
                    stringAccessor[propertiesName[i]].Set(this, reader.GetString());
                }
            }
        }
Пример #6
0
 public override void Deserialize(NetDataReader reader)
 {
     Value = reader.GetSByte();
 }
Пример #7
0
 public void Deserialize(NetDataReader reader)
 {
     Winner = (Faction)reader.GetSByte();
 }
    public static void Resolve(NetworkMessage.Type messageType, NetDataReader data)
    {
        switch (messageType)
        {
        case NetworkMessage.Type.server_loginAnswer:
        {
            NetworkMessage.LoginType loginAnswer = (NetworkMessage.LoginType)data.GetByte();
            if (loginAnswer == NetworkMessage.LoginType.correct)
            {
                //Game.GetPlayer().SetPlayerId(data.GetInt());
                LoginScreenUI.SetCharacterSelectionWaitingCount(data.GetByte());
                return;
            }
            LoginScreenUI.ShowInfo(loginAnswer.ToString());
            break;
        }

        case NetworkMessage.Type.server_characterLoginInfo:
        {
            int     id          = data.GetInt();
            string  name        = data.GetString(data.GetByte());
            Vector3 position    = new Vector3(data.GetFloat(), data.GetFloat(), data.GetFloat());
            float   orientation = data.GetFloat();
            int     modelId     = data.GetByte();

            int index = Database.GetDBCharacterModelList().FindIndex(x => x.id == modelId);
            if (index == -1)
            {
                Debug.LogError("Cannot find modelId '" + modelId + "'");
                index = 0;
            }

            Entity ent = Database.CreateEntity();
            ent.DisableMovement(true);
            ent.SetId(id);
            ent.name = name;
            ent.SetPostStartAction(() =>
                {
                    GameObject obj = GameObject.Find("SpawnPoint");
                    ent.transform.SetParent(obj.transform);
                    ent.transform.localPosition = Vector3.zero;
                    ent.SetOrientation(obj.transform.eulerAngles.y);
                    ent.GetVisualModule().AssignCharacterModelToEntity(Database.GetDBCharacterModelList()[index]);
                    LoginScreenUI.AddCharacterSelectionEntity(ent);
                });

            break;
        }

        case NetworkMessage.Type.server_requestMapLoading:
        {
            //load some map
            break;
        }

        case NetworkMessage.Type.server_createEntity:
        {
            int     id          = data.GetInt();
            string  name        = data.GetString(data.GetByte());
            Vector3 position    = new Vector3(data.GetFloat(), data.GetFloat(), data.GetFloat());
            float   orientation = data.GetFloat();
            int     modelId     = data.GetByte();
            Vector3 userInput   = new Vector3(data.GetFloat(), data.GetFloat(), data.GetFloat());

            int index = Database.GetDBCharacterModelList().FindIndex(x => x.id == modelId);
            if (index == -1)
            {
                Debug.LogError("Cannot find modelId '" + modelId + "'");
                index = 0;
            }

            Entity ent = Database.CreateEntity();
            ent.SetId(id);
            ent.name = name;
            ent.SetPostStartAction(() =>
                {
                    ent.SetPosition(position);
                    ent.SetOrientation(orientation);
                    ent.GetMovementModule().SetRequestInputs(userInput);
                    ent.GetVisualModule().AssignCharacterModelToEntity(Database.GetDBCharacterModelList()[index]);
                });

            break;
        }

        case NetworkMessage.Type.server_removeEntity:
        {
            int entityId = data.GetInt();

            Map tempMap = Game.GetMap();
            if (tempMap == null)
            {
                return;
            }

            tempMap.RemoveEntity(entityId);
            break;
        }

        case NetworkMessage.Type.server_setControllable:
        {
            int  controllableEntityId = data.GetInt();
            bool isMainEntity         = data.GetBool();

            Map tempMap = Game.GetMap();
            if (tempMap == null)
            {
                Network.AddEntityWaitingMessage(controllableEntityId, data);
                return;
            }

            Entity tempEntity = tempMap.GetEntity(controllableEntityId);
            if (tempEntity == null)
            {
                Network.AddEntityWaitingMessage(controllableEntityId, data);
                return;
            }

            PlayerCamera.instance.transform.position = tempEntity.transform.position;
            Game.GetPlayer().ControllableEntity = tempEntity;
            if (isMainEntity)
            {
                Game.GetPlayer().SetPlayerId(tempEntity.GetId());
            }
            break;
        }

        case NetworkMessage.Type.client_movementSnapshot:
        {
            int entityId = data.GetInt();

            if (Game.GetMap() == null)
            {
                return;
            }

            Entity entity = Game.GetMap().GetEntity(entityId);

            if (entity == null)
            {
                return;
            }

            int     time     = data.GetInt();
            Vector3 position = new Vector3(data.GetFloat(), data.GetFloat(), data.GetFloat());
            float   rotation = data.GetFloat();
            Vector3 inputs   = new Vector3(data.GetSByte(), data.GetSByte(), data.GetSByte());

            EntityMovement.MovementSnapshot snapshot = new EntityMovement.MovementSnapshot(time, entityId, position, rotation, inputs);
            entity.GetMovementModule().AddSnapshot(snapshot);
            break;
        }

        case NetworkMessage.Type.server_chatMessage:
        {
            ChatUI.MessageType tempChatMessageType = (ChatUI.MessageType)data.GetByte();
            int    senderId = data.GetInt();
            string message  = data.GetString(data.GetShort());

            if (Game.GetMap() == null)
            {
                return;
            }

            ChatUI.ReceiveChatMessage(Game.GetMap().GetEntity(senderId), tempChatMessageType, message);
            break;
        }

        case NetworkMessage.Type.server_chatChannelInfo:
        {
            bool   addChatChannel  = data.GetBool();
            string chatChannelName = data.GetString(data.GetByte());

            if (addChatChannel)
            {
                ChatUI.AddChatChannel(chatChannelName);
            }
            else
            {
                ChatUI.RemoveChatChannel(chatChannelName);
            }
            break;
        }

        case NetworkMessage.Type.server_entityTeleport:
        {
            Vector3 position = new Vector3(data.GetFloat(), data.GetFloat(), data.GetFloat());
            float   rotation = data.GetFloat();

            Game.GetPlayer().ControllableEntity.transform.position = position;
            Game.GetPlayer().ControllableEntity.GetMovementModule().SetRequestRotation(rotation);
            break;
        }

        case NetworkMessage.Type.server_inventoryItem:
        {
            int id    = data.GetShort();
            int count = data.GetByte();

            Game.GetPlayer().SetItem(id, count);
            break;
        }

        case NetworkMessage.Type.server_guildInfo:
        {
            int steps = 0;
            while (!data.EndOfData && steps <= 10)
            {
                Player.GuildInfo.TimeInfo type = (Player.GuildInfo.TimeInfo)data.GetByte();
                switch (type)
                {
                case Player.GuildInfo.TimeInfo.info:
                {
                    Game.GetPlayer().GetGuildInfo().info = data.GetString(data.GetShort());
                    break;
                }

                case Player.GuildInfo.TimeInfo.announcement:
                {
                    Game.GetPlayer().GetGuildInfo().announcement = data.GetString(data.GetShort());
                    break;
                }

                case Player.GuildInfo.TimeInfo.name:
                {
                    Game.GetPlayer().GetGuildInfo().name = data.GetString(data.GetByte());
                    break;
                }

                case Player.GuildInfo.TimeInfo.members:
                {
                    Player.GuildInfo.Member[] tempMembers = new Player.GuildInfo.Member[data.GetByte()];
                    for (int i = 0; i < tempMembers.Length; i++)
                    {
                        tempMembers[i]      = new Player.GuildInfo.Member();
                        tempMembers[i].id   = data.GetInt();
                        tempMembers[i].name = data.GetString(data.GetByte());
                    }
                    Game.GetPlayer().GetGuildInfo().members = new List <Player.GuildInfo.Member>(tempMembers);
                    break;
                }

                case Player.GuildInfo.TimeInfo.ranks:
                {
                    Player.GuildInfo.Rank[] tempRanks = new Player.GuildInfo.Rank[data.GetByte()];
                    for (int i = 0; i < tempRanks.Length; i++)
                    {
                        tempRanks[i]                       = new Player.GuildInfo.Rank();
                        tempRanks[i].id                    = data.GetInt();
                        tempRanks[i].name                  = data.GetString(data.GetByte());
                        tempRanks[i].isMain                = data.GetBool();
                        tempRanks[i].isBasic               = data.GetBool();
                        tempRanks[i].canMemberInvite       = data.GetBool();
                        tempRanks[i].canMemberRemove       = data.GetBool();
                        tempRanks[i].canRankCreateRemove   = data.GetBool();
                        tempRanks[i].canChangeInfo         = data.GetBool();
                        tempRanks[i].canChangeAnnouncement = data.GetBool();
                    }
                    Game.GetPlayer().GetGuildInfo().ranks = new List <Player.GuildInfo.Rank>(tempRanks);
                    break;
                }

                case Player.GuildInfo.TimeInfo.max:
                {
                    int memberCount = data.GetByte();
                    if (memberCount != Game.GetPlayer().GetGuildInfo().members.Count)
                    {
                        //todo error?
                    }
                    for (int i = 0; i < Game.GetPlayer().GetGuildInfo().members.Count; i++)
                    {
                        Game.GetPlayer().GetGuildInfo().members[i].isOnline = data.GetBool();
                        int rankId = data.GetInt();
                        Game.GetPlayer().GetGuildInfo().members[i].rank = Game.GetPlayer().GetGuildInfo().ranks.Find(x => x.id == rankId);
                    }
                    break;
                }

                default:
                {
                    Debug.LogError("thefuck?");
                    break;
                }
                }
                steps++;
            }
            if (steps >= 10)
            {
                Debug.LogError("critical error happend in guildInfo Message. Maximum steps reached!");
            }

            GuildUI.GuildMessageArrived();
            break;
        }

        case NetworkMessage.Type.server_setGuild:
        {
            int currentId = Game.GetPlayer().GetGuildInfo().id;
            Game.GetPlayer().GetGuildInfo().id = data.GetInt();

            if (Game.GetPlayer().GetGuildInfo().id == -1)
            {
                GuildUI.ShowGuild(false);
            }
            else if (Game.GetPlayer().GetGuildInfo().id != -1 && currentId == -1 && GuildUI.IsGuildVisible())
            {
                GuildUI.ShowGuild(false);
                GuildUI.ShowGuild(true);
            }
            break;
        }

        case NetworkMessage.Type.server_guildListInfo:
        {
            Player.GuildInfo[] guildList = new Player.GuildInfo[data.GetShort()];
            for (int i = 0; i < guildList.Length; i++)
            {
                guildList[i]       = new Player.GuildInfo();
                guildList[i].id    = data.GetInt();
                guildList[i].name  = data.GetString(data.GetShort());
                guildList[i].owner = data.GetString(data.GetByte());
            }
            GuildUI.GuildListArrived(new List <Player.GuildInfo>(guildList));
            break;
        }
        }
    }