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]); } } }
public void Deserialize(NetDataReader reader) { descriptionName = reader.GetString(); paraName = reader.GetString(); paraTypeFullName = reader.GetString(); defaultValueStr = reader.GetString(); selectItemValues = reader.GetStringArray(); }
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); }
/* * 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; } }); }
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; } }