using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net.NetworkInformation; using Firesplash.UnityAssets.SocketIO; using HeathenEngineering.SteamApi.Foundation; using I2.Loc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Steamworks; using TMPro; using UnityEngine; using UnityEngine.Serialization; public class ServerManager : MonoBehaviour { [Serializable] public class PlayerData { public string PLAYER_ID; public string COUNTRY; public string PLAYER_NAME; public string PLAYER_PROFILE_NAME; public string GAME_VERSION; public int PROFILE_INDEX; public int PLAYER_LEVEL; public float PLAYER_CASH; public float TOTAL_FISH_WEIGHT; public int TOTAL_FISH; } private class RankingFishData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public int POINTS; public int FISH_ID; public float FISH_WEIGHT; public string GAME_MODE; public int MAP_ID; } private class GetRankingsData { public int from; public int to; public string GAME_MODE; } [Serializable] public class RankingPlayersData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public float TOTAL_FISH_WEIGHT; public int BEST_FISH_ID; public float BEST_FISH_WEIGHT; public int TOTAL_FISH; public int POINTS; } [Serializable] private class RankingOwnData { public string PLAYER_ID; public int PROFILE_INDEX; public string GAME_MODE; } [Serializable] public class GetRankingOwnData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public float TOTAL_FISH_WEIGHT; public int BEST_FISH_ID; public float BEST_FISH_WEIGHT; public int TOTAL_FISH; public int POINTS; public int POSITION; } [Serializable] public class PlayerLocationData { public string PLAYER_ID; public string COUNTRY; public string PLAYER_NAME; public string PLAYER_PROFILE_NAME; public string GAME_VERSION; public int PROFILE_INDEX; public int PLAYER_LEVEL; public float PLAYER_CASH; public float TOTAL_FISH_WEIGHT; public int TOTAL_FISH; public int LOCATION_ID; } private class GetRankingsLocationData { public int from; public int to; public string GAME_MODE; public int locationID; } [Serializable] public class RankingPlayersLocationData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public float TOTAL_FISH_WEIGHT; public int BEST_FISH_ID; public float BEST_FISH_WEIGHT; public int TOTAL_FISH; public int POINTS; public int MAP_ID; } [Serializable] private class RankingOwnLocationData { public string PLAYER_ID; public int PROFILE_INDEX; public string GAME_MODE; public int locationID; } [Serializable] public class GetRankingOwnLocationData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public float TOTAL_FISH_WEIGHT; public int BEST_FISH_ID; public float BEST_FISH_WEIGHT; public int TOTAL_FISH; public int POINTS; public int POSITION; public int MAP_ID; } [Serializable] private class RewardOwnData { public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; } [Serializable] public class GetRewardOwnData { public string REWARD_TYPE; public string REWARD; } [Serializable] public class PlayerChatData { public string PLAYER_ID; public string PLAYER_NAME; public string COUNTRY; public string LOCATION_ID; } [Serializable] public class GetPlayerChatRoomData { public string ID; public string LOCATION_ID; public string PLAYERS; public int MAX_PLAYERS; } [Serializable] public class ReconnectPlayerData { public string PLAYER_ID; public string PLAYER_NAME; public string COUNTRY; public string ROOM_ID; public string LOCATION_ID; } [Serializable] public class Message { public string MESSAGE_TYPE; public string PLAYER_ID; public string PLAYER_NAME; public string COUNTRY; public string LOCATION_ID; public string MESSAGE; } [Serializable] public class FishMessage { public string PLAYER_ID; public string PLAYER_NAME; public int FISH_ID; public float FISH_WEIGHT; } [Serializable] private class TournamentData { public int ID; public string NAME; public string TYPE; public string VISABLE_TYPE; public string TASK; public string METHOD; public int MAP_ID; public int DURATION; public int PARTICIPANTS_MAX; public int ENTRY_FEE; public int LEVEL_MIN; public int LEVEL_MAX; public string CREATOR_PLAYER_ID; public int CREATOR_PROFILE_INDEX; public string CREATOR_PLAYER_NAME; public long TIME_START; public int TIME_TO_END_S; public int TIME_CREATE_S; } [Serializable] private class TournamentParticipantsData { public int ID; public int TOURNAMENT_ID; public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public int PLAYER_LEVEL; public int TOURNAMENTS_WON; public int RANKING_POINTS; public int BEST_FISH_ID; public float VALUE; public int JOINED_TIMELEFT; public string STATUS; } [Serializable] private class TournamentJoinData { public int TOURNAMENT_ID; public int PARTICIPANTS_MAX; public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public int PLAYER_LEVEL; public int TOURNAMENTS_WON; public int RANKING_POINTS; } [Serializable] private class TournamentJoinedIdsData { public int TOURNAMENT_ID; } [Serializable] private class TournamentInvitesData { public int TOURNAMENT_ID; public string TOURNAMENT_NAME; public string PLAYER_ID; public string SEND_PLAYER_NAME; } [Serializable] private class TournamentCreatorData { public int ID; public string NAME; public string TYPE; public string TYPE_PLAYER_TOURNAMENT; public string TASK; public string METHOD; public int MAP_ID; public int DURATION; public int PARTICIPANTS_MAX; public int ENTRY_FEE; public int LEVEL_MIN; public int LEVEL_MAX; public string PLAYER_ID; public string PLAYER_NAME; public int PROFILE_INDEX; public string INVITES; } [Serializable] private class TournamentFishData { public int TOURNAMENT_ID; public string PLAYER_ID; public int PROFILE_INDEX; public string TASK; public int FISH_ID; public float FISH_WEIGHT; public int MAP_ID; } private enum APITestStage { None = 0, RewardsAndOwnRanking = 1, ServerTime = 2, OtherPlayersRanking = 3, UpdatePlayerData = 4, Tournaments_0 = 5 } public string serverVersion; public SocketIOCommunicator socket; private static ServerManager instance; [FormerlySerializedAs("UserData")] public SteamUserData userData; public long serverTime; public bool isServerTimeUpdated; private long serverTimeOnStart; private ChatManager chatManager; public bool getParticipantReady; public static bool isBanned; private RankingFishData rankingFishData = new RankingFishData(); private GetRankingsData getRankingsData = new GetRankingsData(); public List rankingPlayersData; public GetRankingOwnData rankingOwnData = new GetRankingOwnData(); private GetRankingsLocationData getRankingsLocationData = new GetRankingsLocationData(); public List rankingPlayersLocationData; public GetRankingOwnLocationData rankingOwnLocationData = new GetRankingOwnLocationData(); public List rewardsOwnData; private PlayerChatData playerChatData = new PlayerChatData(); public GetPlayerChatRoomData getPlayerChatRoomData = new GetPlayerChatRoomData(); private float getTimeTimer = 1f; private bool isFirstUpdate; private APITestStage apiTestStage; public bool apiTestRunning; private bool testServerWasTimeout; private string testServerEventNameLast; private string testServerResponseLast; private int socketEventID; public static ServerManager Instance => instance; private void Awake() { UnityEngine.Object.DontDestroyOnLoad(this); if (instance == null) { instance = this; } else if (instance != this) { UnityEngine.Object.Destroy(base.gameObject); } } public void Start() { socket.Instance.On("ON_GET_REWARDS_OWN", delegate(string payload) { if (!apiTestRunning) { OnGetOwnRewards(payload); } else { TestServerResponse("ON_GET_REWARDS_OWN", payload); } }); socket.Instance.On("ON_GET_RANKING_OWN", delegate(string payload) { if (!apiTestRunning) { OnGetOwnRanking(payload); } else { TestServerResponse("ON_GET_RANKING_OWN", payload); } }); socket.Instance.On("ON_GET_RANKING_PLAYERS", delegate(string payload) { if (!apiTestRunning) { OnGetPlayersRanking(payload); } else { TestServerResponse("ON_GET_RANKING_PLAYERS", payload); } }); socket.Instance.On("ON_GET_RANKING_LOCATION_OWN", delegate(string payload) { if (!apiTestRunning) { OnGetOwnRankingLocation(payload); } else { TestServerResponse("ON_GET_RANKING_LOCATION_OWN", payload); } }); socket.Instance.On("ON_GET_RANKING_LOCATION_PLAYERS", delegate(string payload) { if (!apiTestRunning) { OnGetPlayersRankingLocation(payload); } else { TestServerResponse("ON_GET_RANKING_LOCATION_PLAYERS", payload); } }); socket.Instance.On("ON_GET_SERVER_TIME", delegate(string payload) { if (!apiTestRunning) { OnGetServerTime(payload); } else { TestServerResponse("ON_GET_SERVER_TIME", payload); } }); socket.Instance.On("CONNECT", delegate { Debug.Log("Po³¹czono z serwerem UFS2_server"); PlayerReconnect(); }); socket.Instance.On("ON_GET_TOURNAMENTS", delegate(string payload) { if (!apiTestRunning) { OnGetTournaments(payload); } else { TestServerResponse("ON_GET_TOURNAMENTS", payload); } }); socket.Instance.On("ON_GET_TOURNAMENT_PARTICIPANTS", delegate(string payload) { OnGetTournamentParticipants(payload); }); socket.Instance.On("ON_JOIN_TOURNAMENT_FAILED", delegate(string payload) { OnJoinTournamentFailed(payload); }); socket.Instance.On("ON_JOIN_TOURNAMENT_SUCCESS", delegate(string payload) { OnJoinTournamentSuccess(payload); }); socket.Instance.On("ON_GET_TOURNAMENT_JOINED_IDS", delegate(string payload) { if (!apiTestRunning) { OnGetTournamentJoinedIds(payload); } else { TestServerResponse("ON_GET_TOURNAMENT_JOINED_IDS", payload); } }); socket.Instance.On("ON_CREATE_TOURNAMENT", delegate(string payload) { OnCreateTournament(payload); }); socket.Instance.On("ON_GET_TOURNAMENT_INVITES", delegate(string payload) { if (!apiTestRunning) { OnGetTournamentInvites(payload); } else { TestServerResponse("ON_GET_TOURNAMENT_INVITES", payload); } }); socket.Instance.On("ON_GET_DELETE_TOURNAMENT", delegate { OnGetTournamentDeleteByPlayer(); }); socket.Instance.On("ON_GET_BANNED", delegate(string payload) { OnGetBannedPlayer(payload); }); socket.Instance.Connect(); InvokeRepeating("UpdatePlayerData", 60f, 60f); } private void Update() { getTimeTimer = Mathf.MoveTowards(getTimeTimer, 0f, Time.unscaledDeltaTime); if (getTimeTimer == 0f) { RepeatTime(); getTimeTimer = 1f; } FirstPlayerUpdate(); } private void RepeatTime() { if (socket.Instance.IsConnected()) { socket.Instance.Emit("GET_TIME_FROM_SERVER"); serverTime = serverTimeOnStart; } else { long num = DateTimeOffset.Now.ToUnixTimeSeconds(); serverTime = num; } } public void OnGetServerTime(string data) { long num = long.Parse(JObject.Parse(data)["time"].ToString()); serverTimeOnStart = num; isServerTimeUpdated = true; } public long GetServerTime() { return serverTime; } private void FirstPlayerUpdate() { if (SteamManager.Initialized && socket.Instance.IsConnected() && !isFirstUpdate) { UpdatePlayerData(); } } public void UpdatePlayerData() { if (SteamManager.Initialized && socket.Instance.IsConnected() && GameManager.Instance._playerData.currentPlayerProfileIndex != -1) { PlayerData playerData = new PlayerData(); playerData.PROFILE_INDEX = GameManager.Instance._playerData.currentPlayerProfileIndex; playerData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); playerData.PLAYER_NAME = userData.DisplayName; playerData.PLAYER_PROFILE_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; playerData.GAME_VERSION = Application.version; playerData.PLAYER_LEVEL = Singleton.Instance.GetCurrentPlayerData().PlayerLevel; playerData.COUNTRY = Application.systemLanguage.ToString(); playerData.PLAYER_CASH = Singleton.Instance.GetCurrentPlayerData().PlayerCash; playerData.TOTAL_FISH = Singleton.Instance.GetCurrentPlayerData().TotalFish; playerData.TOTAL_FISH_WEIGHT = Singleton.Instance.GetCurrentPlayerData().TotalFishWeight; EmitWithID("UPDATE_PLAYER_DATA", JsonUtility.ToJson(playerData), dataIsPlainText: false); isFirstUpdate = true; } } private void OnGetBannedPlayer(string data) { if (JObject.Parse(data)["isBanned"].ToString() == "yes") { isBanned = true; } else { isBanned = false; } Debug.Log("isBanned: " + isBanned); } public void AddFishToRankings(GameManager.FishSpecies fishSpecies, float fishWeight, int points, int mapId) { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; rankingFishData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); rankingFishData.PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; rankingFishData.PROFILE_INDEX = currentPlayerProfileIndex; rankingFishData.GAME_MODE = Singleton.Instance.GetCurrentPlayerData().GameMode.ToString(); rankingFishData.FISH_ID = (int)fishSpecies; rankingFishData.FISH_WEIGHT = fishWeight; rankingFishData.POINTS = points; rankingFishData.MAP_ID = mapId; EmitWithID("ADD_FISH_TO_RANKINGS", JsonUtility.ToJson(rankingFishData), dataIsPlainText: false); } public void GetRankingPlayers(int from, int to) { _ = GameManager.Instance._playerData.currentPlayerProfileIndex; getRankingsData.from = from; getRankingsData.to = to; getRankingsData.GAME_MODE = Singleton.Instance.GetCurrentPlayerData().GameMode.ToString(); EmitWithID("GET_RANKINGS_PLAYERS", JsonUtility.ToJson(getRankingsData), dataIsPlainText: false); } public void GetOwnRankingPosition() { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; RankingOwnData rankingOwnData = new RankingOwnData(); rankingOwnData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); rankingOwnData.PROFILE_INDEX = currentPlayerProfileIndex; rankingOwnData.GAME_MODE = Singleton.Instance.GetCurrentPlayerData().GameMode.ToString(); EmitWithID("GET_RANKINGS_OWN", JsonUtility.ToJson(rankingOwnData), dataIsPlainText: false); } private void OnGetPlayersRanking(string data) { RankingPlayersData[] collection = JsonHelper.FromJson(JsonHelper.fixJson(data)); rankingPlayersData.Clear(); rankingPlayersData.AddRange(collection); UnityEngine.Object.FindObjectOfType().ShowRankingData(rankingPlayersData); } private void OnGetOwnRanking(string data) { rankingOwnData = JsonUtility.FromJson(data); UnityEngine.Object.FindObjectOfType().ShowOwnRankingData(rankingOwnData); } public void GetRankingPlayersLocation(int from, int to, int locationID) { _ = GameManager.Instance._playerData.currentPlayerProfileIndex; getRankingsLocationData.from = from; getRankingsLocationData.to = to; getRankingsLocationData.locationID = locationID; getRankingsLocationData.GAME_MODE = Singleton.Instance.GetCurrentPlayerData().GameMode.ToString(); EmitWithID("GET_RANKINGS_LOCATION_PLAYERS", JsonUtility.ToJson(getRankingsLocationData), dataIsPlainText: false); } public void GetOwnRankingPositionLocation(int locationID) { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; RankingOwnLocationData rankingOwnLocationData = new RankingOwnLocationData(); rankingOwnLocationData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); rankingOwnLocationData.PROFILE_INDEX = currentPlayerProfileIndex; rankingOwnLocationData.GAME_MODE = Singleton.Instance.GetCurrentPlayerData().GameMode.ToString(); rankingOwnLocationData.locationID = locationID; EmitWithID("GET_RANKINGS_LOCATION_OWN", JsonUtility.ToJson(rankingOwnLocationData), dataIsPlainText: false); } private void OnGetPlayersRankingLocation(string data) { RankingPlayersLocationData[] collection = JsonHelper.FromJson(JsonHelper.fixJson(data)); rankingPlayersLocationData.Clear(); rankingPlayersLocationData.AddRange(collection); UnityEngine.Object.FindObjectOfType().ShowRankingLocationData(rankingPlayersLocationData); } private void OnGetOwnRankingLocation(string data) { rankingOwnLocationData = JsonUtility.FromJson(data); UnityEngine.Object.FindObjectOfType().ShowOwnRankingLocationData(rankingOwnLocationData); } private void TestAddPlayerChat() { _ = GameManager.Instance._playerData.currentPlayerProfileIndex; playerChatData.PLAYER_ID = UnityEngine.Random.Range(100000, 9999999).ToString(); playerChatData.PLAYER_NAME = "Gracz_" + playerChatData.PLAYER_ID; playerChatData.COUNTRY = LocalizationManager.CurrentLanguageCode; playerChatData.LOCATION_ID = "0"; } private void PlayerReconnect() { if (getPlayerChatRoomData.ID != "" && playerChatData.LOCATION_ID != "-1") { ReJoinToChat(); } } public void JoinToChat(string locationId, ChatManager currentChat) { chatManager = currentChat; _ = GameManager.Instance._playerData.currentPlayerProfileIndex; playerChatData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); playerChatData.PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; playerChatData.COUNTRY = LocalizationManager.CurrentLanguageCode; playerChatData.LOCATION_ID = locationId; } private void ReJoinToChat() { _ = GameManager.Instance._playerData.currentPlayerProfileIndex; new ReconnectPlayerData { PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(), PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName, ROOM_ID = getPlayerChatRoomData.ID, LOCATION_ID = getPlayerChatRoomData.LOCATION_ID }; } public void SendChatMessage(string message, string country) { _ = GameManager.Instance._playerData.currentPlayerProfileIndex; new Message { PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(), PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName, COUNTRY = country, MESSAGE = message }; } public void OnGetMessage(string data) { Message message = new Message(); message = JsonUtility.FromJson(data); Debug.Log("data: " + data + " playerChatMessage:" + message.PLAYER_NAME); } private void OnGetChatJoinToRoom(string data) { getPlayerChatRoomData = JsonUtility.FromJson(data); } private void OnGetPlayerJoinToRoom(string data) { Message message = new Message(); message = JsonUtility.FromJson(data); Debug.Log("data: " + data + " playerChatMessage:" + message.PLAYER_NAME); } private void OnLeavePlayerFromRoom(string data) { Message message = new Message(); message = JsonUtility.FromJson(data); Debug.Log("Gracz wyszed³ z pokoju data: " + data + " playerChatMessage:" + message.PLAYER_NAME); } private void OnGetFishMessage(string data) { FishMessage fishMessage = new FishMessage(); fishMessage = JsonUtility.FromJson(data); Debug.Log("Gracz zlapal rybe: " + fishMessage.FISH_ID + " weight: " + fishMessage.FISH_WEIGHT); } public void ChatDisconnect() { getPlayerChatRoomData.ID = ""; getPlayerChatRoomData.LOCATION_ID = "-1"; getPlayerChatRoomData.PLAYERS = ""; } private void OnGetOwnRewards(string data) { GetRewardOwnData[] collection = JsonHelper.FromJson(JsonHelper.fixJson(data)); rewardsOwnData.Clear(); rewardsOwnData.AddRange(collection); } public void GetOwnRewards() { RewardOwnData rewardOwnData = new RewardOwnData(); int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; rewardOwnData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); rewardOwnData.PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; rewardOwnData.PROFILE_INDEX = currentPlayerProfileIndex; EmitWithID("GET_REWARDS_OWN", JsonUtility.ToJson(rewardOwnData), dataIsPlainText: false); } public void GetAllTournaments() { socket.Instance.Emit("GET_TOURNAMENTS"); } public void GetTournament(int tournamentId) { Debug.Log("Get tournament emit"); EmitWithID("GET_TOURNAMENT", tournamentId.ToString(), dataIsPlainText: false); } private void OnGetTournaments(string data) { TournamentData[] array = JsonHelper.FromJson(JsonHelper.fixJson(data)); for (int i = 0; i < array.Length; i++) { bool flag = false; for (int j = 0; j < TournamentManager.Instance.tournaments.Count; j++) { if (TournamentManager.Instance.tournaments[j].id == array[i].ID) { TournamentManager.Instance.tournaments[j].timeToEnd = array[i].TIME_TO_END_S; TournamentManager.Instance.tournaments[j].timeLeft = (int)((array[i].TIME_START + array[i].DURATION * 60 - serverTime) / 60); TournamentManager.Instance.tournaments[j].timeStart = array[i].TIME_START; TournamentManager.Instance.tournaments[j].timeCreate = array[i].TIME_CREATE_S; flag = true; } } if (!flag) { TournamentManager.CTournament cTournament = new TournamentManager.CTournament(); cTournament.id = array[i].ID; cTournament.tournamentName = array[i].NAME; cTournament.tournamentType = (TournamentManager.TournamentContentType)Enum.Parse(typeof(TournamentManager.TournamentContentType), array[i].TYPE); cTournament.type = (TournamentManager.TournamentType)Enum.Parse(typeof(TournamentManager.TournamentType), array[i].VISABLE_TYPE); cTournament.tournamentTask = (TournamentManager.CTournament.TournamentTask)Enum.Parse(typeof(TournamentManager.CTournament.TournamentTask), array[i].TASK); cTournament.tournamentMethod = (TournamentManager.CTournament.TournamentMethod)Enum.Parse(typeof(TournamentManager.CTournament.TournamentMethod), array[i].METHOD); cTournament.mapId = array[i].MAP_ID; cTournament.duration = array[i].DURATION; cTournament.participantMaximum = array[i].PARTICIPANTS_MAX; cTournament.entryFee = array[i].ENTRY_FEE; cTournament.levelRange = new Vector2(array[i].LEVEL_MIN, array[i].LEVEL_MAX); cTournament.timeStart = array[i].TIME_START; cTournament.creatorPlayerId = array[i].CREATOR_PLAYER_ID; cTournament.creatorPlayerName = array[i].CREATOR_PLAYER_NAME; cTournament.creatorProfileIndex = array[i].CREATOR_PROFILE_INDEX; cTournament.timeLeft = (int)((array[i].TIME_START + array[i].DURATION * 60 - serverTime) / 60); cTournament.timeToEnd = array[i].TIME_TO_END_S; cTournament.timeCreate = array[i].TIME_CREATE_S; TournamentManager.Instance.tournaments.Add(cTournament); } } for (int k = 0; k < TournamentManager.Instance.tournaments.Count; k++) { bool flag2 = true; for (int l = 0; l < array.Length; l++) { if (TournamentManager.Instance.tournaments[k].id == array[l].ID) { flag2 = false; } } if (flag2) { TournamentManager.Instance.tournaments.Remove(TournamentManager.Instance.tournaments[k]); } } Debug.Log("Odebrano liste turniejów z serwera: " + array.Length); } public void GetTournamentParticipants(int tournamentId) { EmitWithID("GET_TOURNAMENT_PARTICIPANTS", tournamentId.ToString(), dataIsPlainText: false); } private void OnGetTournamentParticipants(string data) { getParticipantReady = true; TournamentParticipantsData[] array = JsonHelper.FromJson(JsonHelper.fixJson(data)); Debug.Log("Odebrano liste uczestników turniejów z serwera: " + array.Length); for (int i = 0; i < array.Length; i++) { for (int j = 0; j < TournamentManager.Instance.tournaments.Count; j++) { if (TournamentManager.Instance.tournaments[j].id != array[i].TOURNAMENT_ID) { continue; } bool flag = false; for (int k = 0; k < TournamentManager.Instance.tournaments[j].tournamentParticipants.Count; k++) { if (TournamentManager.Instance.tournaments[j].tournamentParticipants[k].playerId == array[i].PLAYER_ID && TournamentManager.Instance.tournaments[j].tournamentParticipants[k].profile_index == array[i].PROFILE_INDEX) { TournamentManager.Instance.tournaments[j].tournamentParticipants[k].player_level = array[i].PLAYER_LEVEL; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].tournaments_won = array[i].TOURNAMENTS_WON; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].rankings_points = array[i].RANKING_POINTS; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].value = array[i].VALUE; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].bestFishId = array[i].BEST_FISH_ID; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].status = array[i].STATUS; TournamentManager.Instance.tournaments[j].tournamentParticipants[k].joined_timeleft = array[i].JOINED_TIMELEFT; flag = true; } } if (!flag) { TournamentManager.CTournament.TournamentParticipant tournamentParticipant = new TournamentManager.CTournament.TournamentParticipant(); tournamentParticipant.playerId = array[i].PLAYER_ID; tournamentParticipant.playerName = array[i].PLAYER_NAME; tournamentParticipant.profile_index = array[i].PROFILE_INDEX; tournamentParticipant.player_level = array[i].PLAYER_LEVEL; tournamentParticipant.tournaments_won = array[i].TOURNAMENTS_WON; tournamentParticipant.rankings_points = array[i].RANKING_POINTS; tournamentParticipant.bestFishId = array[i].BEST_FISH_ID; tournamentParticipant.value = array[i].VALUE; tournamentParticipant.status = array[i].STATUS; tournamentParticipant.joined_timeleft = array[i].JOINED_TIMELEFT; TournamentManager.Instance.tournaments[j].tournamentParticipants.Add(tournamentParticipant); } } } } public void JoinToTournament(TournamentManager.CTournament tournament) { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; TournamentJoinData tournamentJoinData = new TournamentJoinData(); tournamentJoinData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentJoinData.PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; tournamentJoinData.PROFILE_INDEX = currentPlayerProfileIndex; tournamentJoinData.TOURNAMENT_ID = tournament.id; tournamentJoinData.PARTICIPANTS_MAX = tournament.participantMaximum; tournamentJoinData.PLAYER_LEVEL = Singleton.Instance.GetCurrentPlayerData().PlayerLevel; tournamentJoinData.TOURNAMENTS_WON = Singleton.Instance.GetCurrentPlayerData().PlayerTournamentsWon; tournamentJoinData.RANKING_POINTS = Singleton.Instance.GetCurrentPlayerData().PlayerRankingPoints; EmitWithID("JOIN_TOURNAMENT", JsonUtility.ToJson(tournamentJoinData), dataIsPlainText: false); } private void OnJoinTournamentFailed(string data) { Debug.Log("B³¹d do³aczenia, limit uczestników"); } private void OnJoinTournamentSuccess(string data) { Debug.Log("Do³aczenie do turnieju: " + data); if (int.TryParse(data, out var result)) { TournamentManager.Instance.myTournamentsIds.Add(result); } } public void GetTournamentJoinedIds() { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; TournamentJoinData tournamentJoinData = new TournamentJoinData(); tournamentJoinData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentJoinData.PROFILE_INDEX = currentPlayerProfileIndex; EmitWithID("GET_JOINED_TOURNAMENT_IDS", JsonUtility.ToJson(tournamentJoinData), dataIsPlainText: false); } private void OnGetTournamentJoinedIds(string data) { Debug.Log("OnGetTournamentJoinedIds: " + data); TournamentJoinedIdsData[] array = JsonHelper.FromJson(JsonHelper.fixJson(data)); TournamentManager.Instance.myTournamentsIds.Clear(); for (int i = 0; i < array.Length; i++) { TournamentManager.Instance.myTournamentsIds.Add(array[i].TOURNAMENT_ID); } } public void CreateTournament(TournamentManager.CTournament tournament, List invitePlayers) { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; TournamentCreatorData tournamentCreatorData = new TournamentCreatorData(); tournamentCreatorData.NAME = tournament.tournamentName; tournamentCreatorData.TYPE = tournament.tournamentType.ToString(); tournamentCreatorData.TYPE_PLAYER_TOURNAMENT = tournament.type.ToString(); tournamentCreatorData.TASK = tournament.tournamentTask.ToString(); tournamentCreatorData.METHOD = tournament.tournamentMethod.ToString(); tournamentCreatorData.MAP_ID = tournament.mapId; tournamentCreatorData.DURATION = tournament.duration; tournamentCreatorData.ENTRY_FEE = tournament.entryFee; tournamentCreatorData.PARTICIPANTS_MAX = tournament.participantMaximum; tournamentCreatorData.LEVEL_MIN = (int)tournament.levelRange.x; tournamentCreatorData.LEVEL_MAX = (int)tournament.levelRange.y; tournamentCreatorData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentCreatorData.PLAYER_NAME = Singleton.Instance.GetCurrentPlayerData().PlayerName; tournamentCreatorData.PROFILE_INDEX = currentPlayerProfileIndex; tournamentCreatorData.INVITES = JsonHelper.ToJson(invitePlayers.ToArray()); EmitWithID("CREATE_TOURNAMENT", JsonUtility.ToJson(tournamentCreatorData), dataIsPlainText: false); } private void OnCreateTournament(string data) { if (int.TryParse(data, out var result) && result != -1) { TournamentManager.Instance.currentCreatorTournament.id = result; TournamentPlayerCreator tournamentPlayerCreator = UnityEngine.Object.FindObjectOfType(); if (tournamentPlayerCreator != null) { Debug.Log("Create tournament id:" + result); tournamentPlayerCreator.CreateSuccess(); } } } public void ReadyTournament(TournamentManager.CTournament tournament) { int currentPlayerProfileIndex = GameManager.Instance._playerData.currentPlayerProfileIndex; TournamentJoinData tournamentJoinData = new TournamentJoinData(); tournamentJoinData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentJoinData.PROFILE_INDEX = currentPlayerProfileIndex; tournamentJoinData.TOURNAMENT_ID = tournament.id; EmitWithID("READY_TOURNAMENT", JsonUtility.ToJson(tournamentJoinData), dataIsPlainText: false); } public void AutoReadyTournament(TournamentManager.CTournament.TournamentParticipant participant, int tournament_id) { TournamentJoinData tournamentJoinData = new TournamentJoinData(); tournamentJoinData.PLAYER_ID = participant.playerId; tournamentJoinData.PROFILE_INDEX = participant.profile_index; tournamentJoinData.TOURNAMENT_ID = tournament_id; EmitWithID("READY_TOURNAMENT", JsonUtility.ToJson(tournamentJoinData), dataIsPlainText: false); } public void GetTournamentInvites() { TournamentJoinData tournamentJoinData = new TournamentJoinData(); tournamentJoinData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); EmitWithID("GET_INVITES_TOURNAMENT", JsonUtility.ToJson(tournamentJoinData), dataIsPlainText: false); } private void OnGetTournamentInvites(string data) { TournamentInvitesData[] array = JsonHelper.FromJson(JsonHelper.fixJson(data)); for (int i = 0; i < array.Length; i++) { bool flag = false; for (int j = 0; j < TournamentManager.Instance.myTournamentInvites.Count; j++) { if (TournamentManager.Instance.myTournamentInvites[j].tournamentId == array[i].TOURNAMENT_ID) { flag = true; } } if (!flag) { TournamentManager.CInvite cInvite = new TournamentManager.CInvite(); cInvite.tournamentId = array[i].TOURNAMENT_ID; cInvite.tournamentName = array[i].TOURNAMENT_NAME; cInvite.playerSenderName = array[i].SEND_PLAYER_NAME; TournamentManager.Instance.myTournamentInvites.Add(cInvite); } } for (int k = 0; k < TournamentManager.Instance.myTournamentInvites.Count; k++) { bool flag2 = false; for (int l = 0; l < array.Length; l++) { if (TournamentManager.Instance.myTournamentInvites[k].tournamentId == array[l].TOURNAMENT_ID) { flag2 = true; } } if (!flag2) { TournamentManager.Instance.myTournamentInvites.Remove(TournamentManager.Instance.myTournamentInvites[k]); } } } public void StartPlayerTournament(int tournamentId) { TournamentJoinedIdsData tournamentJoinedIdsData = new TournamentJoinedIdsData(); tournamentJoinedIdsData.TOURNAMENT_ID = tournamentId; EmitWithID("START_TOURNAMENT", JsonUtility.ToJson(tournamentJoinedIdsData), dataIsPlainText: false); } public void TournamentSendFish(int fishId, float weight, TournamentManager.CTournament tournament, int mapId = 0) { TournamentFishData tournamentFishData = new TournamentFishData(); tournamentFishData.TOURNAMENT_ID = tournament.id; tournamentFishData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentFishData.PROFILE_INDEX = GameManager.Instance._playerData.currentPlayerProfileIndex; tournamentFishData.TASK = tournament.tournamentTask.ToString(); tournamentFishData.FISH_ID = fishId; tournamentFishData.FISH_WEIGHT = weight; tournamentFishData.MAP_ID = mapId; EmitWithID("ADD_FISH_TOURNAMENT", JsonUtility.ToJson(tournamentFishData), dataIsPlainText: false); } public void TournamentSendFishTESt(int fishId, float weight, int tournamentID) { TournamentFishData tournamentFishData = new TournamentFishData(); tournamentFishData.TOURNAMENT_ID = tournamentID; tournamentFishData.PLAYER_ID = SteamUser.GetSteamID().m_SteamID.ToString(); tournamentFishData.PROFILE_INDEX = GameManager.Instance._playerData.currentPlayerProfileIndex; tournamentFishData.FISH_ID = fishId; tournamentFishData.FISH_WEIGHT = weight; EmitWithID("ADD_FISH_TOURNAMENT", JsonUtility.ToJson(tournamentFishData), dataIsPlainText: false); } public void DeletePlayerTournament(int tournamentId) { TournamentJoinedIdsData tournamentJoinedIdsData = new TournamentJoinedIdsData(); tournamentJoinedIdsData.TOURNAMENT_ID = tournamentId; EmitWithID("DELETE_TOURNAMENT", JsonUtility.ToJson(tournamentJoinedIdsData), dataIsPlainText: false); } private void OnGetTournamentDeleteByPlayer() { TournamentScene tournamentScene = UnityEngine.Object.FindObjectOfType(); if ((bool)tournamentScene) { TournamentManager.Instance.tournaments.Clear(); if (tournamentScene.currentTournamentContentType == TournamentManager.TournamentContentType.CreatorTournament) { tournamentScene.ChangeType("CreatorTournament"); } if (tournamentScene.currentTournamentContentType == TournamentManager.TournamentContentType.MyTournaments) { tournamentScene.ChangeType("MyTournaments"); } if (tournamentScene.currentTournamentContentType == TournamentManager.TournamentContentType.Players) { tournamentScene.ChangeType("Players"); } } } private void TestServerResponse(string eventName, string payload) { testServerEventNameLast = eventName; testServerResponseLast = payload; } private void ResetResponse() { testServerWasTimeout = false; testServerEventNameLast = null; testServerResponseLast = null; } private IEnumerator WaitForResponseOrTimeout(bool filterOut_Time = true, bool filterOut_Rewards = true, bool filterOut_Invites = true) { testServerWasTimeout = false; float timeout = 5f; float startTime = Time.time; while (Time.time - startTime < timeout) { if (testServerEventNameLast != null) { bool flag = false; if (filterOut_Time && testServerEventNameLast == "ON_GET_SERVER_TIME") { flag = true; } if (filterOut_Rewards && testServerEventNameLast == "ON_GET_REWARDS_OWN") { flag = true; } if (filterOut_Invites && testServerEventNameLast == "ON_GET_TOURNAMENT_INVITES") { flag = true; } if (!flag) { yield break; } } yield return null; } testServerWasTimeout = true; } public void StartAPITest(TextMeshProUGUI uiText) { if (!apiTestRunning) { apiTestStage = (APITestStage)((int)(apiTestStage + 1) % Enum.GetValues(typeof(APITestStage)).Length); if (apiTestStage == APITestStage.None) { UnityEngine.Object.Destroy(uiText.transform.parent.gameObject); } else { StartCoroutine(TestCoroutine()); } } IEnumerator TestCoroutine() { apiTestRunning = true; uiText.text = ""; uiText.text += $"Socket status: {socket.Instance.Status}\n"; TextMeshProUGUI textMeshProUGUI = uiText; textMeshProUGUI.text = textMeshProUGUI.text + "Socket socket ID: " + socket.Instance.SocketID + "\n"; TextMeshProUGUI textMeshProUGUI2 = uiText; textMeshProUGUI2.text = textMeshProUGUI2.text + "Socket address: " + socket.socketIOAddress + "\n"; uiText.text += "\n//////////////////////////////////////////////////////////////////////////////\n\n"; using (System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping()) { string text = socket.socketIOAddress.Split(':')[0]; try { PingReply pingReply = ping.Send(text); if (pingReply.Status == IPStatus.Success) { uiText.text += $"Ping to {pingReply.Address} successful: Time={pingReply.RoundtripTime}ms\n"; } else { uiText.text += $"Ping to {pingReply.Address} failed: {pingReply.Status}\n"; } } catch (Exception ex) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Failed to ping " + text + ": " + ex.Message + "\n"; } } uiText.text += $"\n///////////////////////////////////// API TEST STAGE: {apiTestStage} /////////////////////////////////////////\n\n"; if (apiTestStage == APITestStage.RewardsAndOwnRanking) { uiText.text += "\nEmitting event: GET_REWARDS_OWN\n"; ResetResponse(); GetOwnRewards(); yield return WaitForResponseOrTimeout(filterOut_Time: true, filterOut_Rewards: false); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: GET_RANKINGS_OWN\n"; ResetResponse(); GetOwnRankingPosition(); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: GET_RANKINGS_LOCATION_OWN\n"; ResetResponse(); GetOwnRankingPositionLocation(2); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: ADD_FISH_TO_RANKINGS\n"; List list = new List { 2 }; int num = list[UnityEngine.Random.Range(0, list.Count)]; GameManager.FishSpecies fishSpecies = GameManager.FishSpecies.Perch; float num2 = 1f; int num3 = 1; switch (num) { case 0: fishSpecies = GameManager.FishSpecies.Bluegill; num2 = 0.7966322f; num3 = 4; break; case 1: fishSpecies = GameManager.FishSpecies.Asp; num2 = 1.2f; num3 = 5; break; case 2: fishSpecies = GameManager.FishSpecies.CharArctic; num2 = 1.2f; num3 = 5; break; case 3: fishSpecies = GameManager.FishSpecies.Tench; num2 = 1.2f; num3 = 5; break; case 4: fishSpecies = GameManager.FishSpecies.Tench; num2 = 1.2f; num3 = 5; break; } uiText.text += $"Fish: {fishSpecies} Weight: {num2} Points: {num3} Map ID: {num}\n"; ResetResponse(); AddFishToRankings(fishSpecies, num2, num3, num); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } } if (apiTestStage == APITestStage.ServerTime) { uiText.text += "\nEmitting event: GET_TIME_FROM_SERVER\n"; ResetResponse(); RepeatTime(); yield return WaitForResponseOrTimeout(filterOut_Time: false); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } } if (apiTestStage == APITestStage.OtherPlayersRanking) { uiText.text += "\nEmitting event: GET_RANKINGS_PLAYERS\n"; ResetResponse(); GetRankingPlayers(15, 0); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: GET_RANKINGS_LOCATION_PLAYERS\n"; ResetResponse(); GetRankingPlayersLocation(15, 0, 2); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } } if (apiTestStage == APITestStage.UpdatePlayerData) { uiText.text += "\nEmitting event: UPDATE_PLAYER_DATA\n"; ResetResponse(); UpdatePlayerData(); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } } if (apiTestStage == APITestStage.Tournaments_0) { uiText.text += "\nEmitting event: GET_TOURNAMENTS\n"; ResetResponse(); GetAllTournaments(); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: GET_JOINED_TOURNAMENT_IDS\n"; ResetResponse(); GetTournamentJoinedIds(); yield return WaitForResponseOrTimeout(); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } uiText.text += "\nEmitting event: GET_INVITES_TOURNAMENT\n"; ResetResponse(); GetTournamentInvites(); yield return WaitForResponseOrTimeout(filterOut_Time: true, filterOut_Rewards: true, filterOut_Invites: false); if (!testServerWasTimeout) { TextMeshProUGUI textMeshProUGUI3 = uiText; textMeshProUGUI3.text = textMeshProUGUI3.text + "Received response for " + testServerEventNameLast + ": " + testServerResponseLast + "\n"; } else { uiText.text += "Response timeout\n"; } } string path = $"ServerAPITest_Stage_{apiTestStage}.txt"; using (StreamWriter streamWriter = new StreamWriter(Path.Combine(Application.persistentDataPath, path), append: false)) { streamWriter.Write(uiText.text); } yield return new WaitForSeconds(1f); uiText.text += "\n///////////////////////////////////// API TEST DONE /////////////////////////////////////////\n\n"; apiTestRunning = false; } } private void EmitWithID(string eventName, string jsonData, bool dataIsPlainText) { string text = jsonData; try { JObject jObject = JObject.Parse(jsonData); jObject["SOC_EV_ID"] = socketEventID; text = jObject.ToString(Formatting.None); } catch { text = jsonData; } socket.Instance.Emit(eventName, text, dataIsPlainText); socketEventID++; if (socketEventID >= 10000) { socketEventID = 0; } } }