Beispiel #1
0
 public void Deserialize(NetDataReader reader)
 {
     classFullName = reader.GetString();
     methodName    = reader.GetString();
     {
         string[] keys   = reader.GetStringArray();
         string[] values = reader.GetStringArray();
         paramNameValues = new Dictionary <string, string>();
         for (int i = 0; i < keys.Length; i++)
         {
             paramNameValues.Add(keys[i], values[i]);
         }
     }
 }
Beispiel #2
0
 public void Deserialize(NetDataReader reader)
 {
     descriptionName  = reader.GetString();
     paraName         = reader.GetString();
     paraTypeFullName = reader.GetString();
     defaultValueStr  = reader.GetString();
     selectItemValues = reader.GetStringArray();
 }
Beispiel #3
0
        public void WriteReadStringArray()
        {
            var ndw = new NetDataWriter();

            ndw.PutArray(new[] { "First", "Second", "Third", "Fourth" });

            var ndr             = new NetDataReader(ndw.Data);
            var readStringArray = ndr.GetStringArray(10);

            Assert.That(new[] { "First", "Second", "Third", "Fourth" }, Is.EqualTo(readStringArray).AsCollection);
        }
Beispiel #4
0
        /*
         * Incoming:
         * 0 -> Command
         * 1...n -> Data
         *
         * Outgoing:
         * 0 -> Type [INFO, CMD, DATA]
         * 1 -> Topic
         * 2...n -> Data
         */

        /// <summary>
        /// Processes any incoming messages to the server.
        /// </summary>
        /// <param name="peer">The peer (or client) sending data.</param>
        /// <param name="reader">Contains the data.</param>
        /// <param name="method"></param>
        private void Process(NetPeer peer, NetDataReader reader, DeliveryMethod method)
        {
            ThreadPool.QueueUserWorkItem(state =>
            {
                var message = reader.GetStringArray();

                switch (message[0])
                {
                case "PlayerJoin":     // Means a new player has joined the lobby and should be added to the server.
                    FinishPlayerJoinForPeer(peer, message[1]);
                    break;

                case "SendPlayerList":     // Means the client has requested an update of their playerlist.
                    BroadcastPlayerlist();
                    break;

                case "LobbyReady":     // Means any player has performed a ready check, so the server can check if all the players have done so.
                    ReadyPlayerAndBroadcast(peer, message[1]);
                    break;

                case "GameStarted":     // Means the game scene has been loaded, so the server can distribute roles and chars.
                    _game.Start();
                    SendRoleAndCharacters(peer);
                    break;

                case "SetMaxHealth":     // Means the player is set up and ready to receive data relevant to gameplay.
                    _game.DealCardsAtStart();
                    SendHand(peer, int.Parse(message[1]));
                    break;

                case "DrawCard":
                    DealCardToPlayer(peer);
                    break;

                case "NextTurn":
                    _game.NextTurn();
                    break;

                default:     // Means the client sent an incomprehensible message.
                    SendMessage(peer, "INFO", "ERROR", "Unknown Command");
                    break;
                }
            });
        }
Beispiel #5
0
 public void Deserialize(NetDataReader reader)
 {
     PlayersArray = reader.GetStringArray();
 }
        private void OnServerInteract(ServerInteractPacket packet, NetPeer peer)
        {
            ServerInteractionType interactionType = (ServerInteractionType)packet.Type;

            if (!InstalledAddons.TryGetValue(packet.AddonId, out AddonInfo addonInfo))
            {
                Logger.Error($"Addon with id \"{packet.AddonId}\" tried to use interaction \"{interactionType}\" on server but addon is not loaded!");
                return;
            }

            NetDataReader reader = new NetDataReader(packet.Data);

            switch (interactionType)
            {
            case ServerInteractionType.ExecuteCommand:
            {
                if (!Extensions.CheckSendPermission(AddonReceivePermissionTypes.ConsoleCommandExecution))
                {
                    Logger.Error($"Addon \"{addonInfo.AddonName}\" tried to execute \"Console Command\" but server dont have required permission!");
                    return;
                }

                var command   = reader.GetString();
                var arguments = reader.GetStringArray();

                var sender = new CustomConsoleExecutor(this, command, arguments, packet.AddonId);
                GameCore.Console.singleton.TypeCommand($"{command} {string.Join(" ", arguments)}", sender);
            }
            break;

            case ServerInteractionType.Broadcast:
            {
                if (!Extensions.CheckSendPermission(AddonReceivePermissionTypes.Broadcasts))
                {
                    Logger.Error($"Addon \"{addonInfo.AddonName}\" tried to send \"Broadcast\" but server dont have required permission!");
                    return;
                }

                var message   = reader.GetString();
                var duration  = reader.GetUShort();
                var adminOnly = reader.GetBool();

                if (adminOnly)
                {
                    foreach (var plr in Player.List)
                    {
                        if (plr.ReferenceHub.serverRoles.LocalRemoteAdmin)
                        {
                            plr.Broadcast(duration, message, BroadcastFlags.Normal, false);
                        }
                    }
                }
                else
                {
                    Server.Broadcast.RpcAddElement(message, duration, BroadcastFlags.Normal);
                }
            }
            break;

            case ServerInteractionType.ClearBroadcast:
            {
                if (!Extensions.CheckSendPermission(AddonReceivePermissionTypes.ClearBroadcasts))
                {
                    Logger.Error($"Addon \"{addonInfo.AddonName}\" tried to \"Clear Broadcasts\" but server dont have required permission!");
                    return;
                }

                Server.Broadcast.RpcClearElements();
            }
            break;

            case ServerInteractionType.Hint:
            {
                if (!Extensions.CheckSendPermission(AddonReceivePermissionTypes.HintMessages))
                {
                    Logger.Error($"Addon \"{addonInfo.AddonName}\" tried to send \"Hint Message\" but server dont have required permission!");
                    return;
                }

                var message   = reader.GetString();
                var duration  = reader.GetFloat();
                var adminOnly = reader.GetBool();

                foreach (var plr in Player.List)
                {
                    if (plr.ReferenceHub.serverRoles.LocalRemoteAdmin || !adminOnly)
                    {
                        plr.ShowHint(message, duration);
                    }
                }
            }
            break;

            case ServerInteractionType.Roundrestart:
            {
                if (!Extensions.CheckSendPermission(AddonReceivePermissionTypes.Roundrestart))
                {
                    Logger.Error($"Addon \"{addonInfo.AddonName}\" tried to use \"Round Restart\" but server dont have required permission!");
                    return;
                }

                var port = reader.GetUShort();

                if (port != 0)
                {
                    NetworkServer.SendToAll <RoundRestartMessage>(new RoundRestartMessage(RoundRestartType.FullRestart, 0f, port, true), 0, false);
                    RoundRestarting.RoundRestart.InitiateRoundRestart();
                }
                else
                {
                    RoundRestarting.RoundRestart.InitiateRoundRestart();
                }
            }
            break;
            }
        }