public static void Disconnect() { instance.serverConnection.Stop(); instance.networkThread.Interrupt(); instance.networkThread = null; Debug.Log("disconnecting..."); Game.AddThreadAction(() => LoginScreenUI.ShowInfo("disconnected")); }
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; } } }