Beispiel #1
0
    /// <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
        }
    }
Beispiel #2
0
        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}");
                }
            }
        }
Beispiel #3
0
    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();
    }