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); }
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); } }
/// <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()); } } }
public override void Deserialize(NetDataReader reader) { Value = reader.GetSByte(); }
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; } } }