/// <summary> /// Generates a server status from the specified <paramref name="server"/>. /// </summary> public ServerStatus(Server server, bool anonymous = false) { ArgumentNullException.ThrowIfNull(server); Version = ServerVersion.Of(server); if (!anonymous) { Players = new ServerPlayers(server); } Description = new ServerDescription(server); var faviconFile = "favicon.png"; if (File.Exists(faviconFile)) { byte[] imageData = File.ReadAllBytes(@"favicon.png"); bool isValidImage = imageData.Length >= PngHeader.Length && PngHeader.SequenceEqual(imageData.AsSpan(0, PngHeader.Length)); if (isValidImage) { string b64 = Convert.ToBase64String(imageData); Favicon = $"data:image/png;base64,{b64}"; } else { server.Logger.LogError("The favicon.png is invalid! Skipping it."); Favicon = b64obsidian; } } else { Favicon = b64obsidian; // TOOD: add proper image } }
private void SendPlayersInfo() { var packet = new ServerPlayers() { WaitTime = _waitTime, Players = _players.Values.Select((p) => p.GetPlayerInfo()).ToArray(), }; var data = _netSerializer.Serialize(packet); foreach (var(netId, player) in _players) { if (_peers.ContainsKey(netId)) { _peers[netId].Send(data, SendOptions.ReliableUnordered); } else if (netId >= 0) { Logger.Log($"SERVER unknown peer {netId}"); } } }
void Start() { if (IOL.Instance == null) { Debug.LogWarning("Не найден главный инстанс игры"); return; } serverRequests = IOL.Instance.ServerRequests; serverPlayers = GetComponent<ServerPlayers>(); smiles = GetComponent<Smiles>(); state = GameStates.WaitForPlayers; times = new GameTimes(); IOL.Instance.ServerResponses.OnCurrentTimeUpdate += OnServerTimeUpdate; IOL.Instance.ServerResponses.OnGameStateUpdate += OnGameStateUpdate; IOL.Instance.ServerResponses.OnPlayersInfo += OnPlayersInfo; IOL.Instance.ServerResponses.OnCirclesInfo += OnCirclesInfo; IOL.Instance.ServerResponses.OnCircleAndPlayer += OnCircleAndPlayer; IOL.Instance.ServerResponses.OnSmile += OnServerSmile; IOL.Instance.Connection.OnRoomLeave += OnRoomLeave; IOL.Instance.Connection.OnConnectClosed += OnConnectClosed; serverRequests.ReadyForGame(); }