Пример #1
0
        private void RefreshData()
        {
            ClientRetriever clientsRetriever =
                new ClientRetriever(ClientsRetrievedCallback, Error);

            clientsRetriever.GetForPartner(LoggedUserContext.LoggedUser);
        }
Пример #2
0
        public override void Execute(string commandArgs)
        {
            var splittedCommand = commandArgs.Trim().Split(' ');

            if (splittedCommand.Length == 2)
            {
                var playerName = splittedCommand[0];
                var client     = ClientRetriever.GetAuthenticatedClients().FirstOrDefault(p => p.PlayerName == playerName);

                if (client != null)
                {
                    var newMessageData = new ChatPrivateMsgData
                    {
                        From = GeneralSettings.SettingsStore.ConsoleIdentifier,
                        To   = client.PlayerName,
                        Text = commandArgs.Substring(client.PlayerName.Length + 1)
                    };

                    MessageQueuer.SendToClient <ChatSrvMsg>(client, newMessageData);
                }
                else
                {
                    LunaLog.Normal("Player not found!");
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Disconnect all clients
 /// </summary>
 public static void SendConnectionEndToAll(string reason)
 {
     foreach (var client in ClientRetriever.GetAuthenticatedClients())
     {
         SendConnectionEnd(client, reason);
     }
 }
Пример #4
0
        public override void Execute(string commandArgs)
        {
            string playerName;
            string reason;

            CommandSystemHelperMethods.SplitCommand(commandArgs, out playerName, out reason);
            reason = string.IsNullOrEmpty(reason) ? "No reason specified" : reason;

            if (playerName != "")
            {
                var player = ClientRetriever.GetClientByName(playerName);
                if (player != null)
                {
                    LunaLog.Normal($"Kicking {playerName} from the server");
                    MessageQueuer.SendConnectionEnd(player, $"Kicked from the server: {reason}");
                }
                else
                {
                    LunaLog.Normal($"Player: {playerName} not found");
                }
            }
            else
            {
                LunaLog.Error("Syntax error. Usage: /kick playername [reason]");
            }
        }
Пример #5
0
        public static void SendAllSubspaces(ClientStructure client)
        {
            LunaLog.Debug($"Sending {client.PlayerName} {WarpContext.Subspaces.Count} possible subspaces");

            var msgData = ServerContext.ServerMessageFactory.CreateNewMessageData <WarpSubspacesReplyMsgData>();

            var subspaces = WarpContext.Subspaces.ToArray().Select(s =>
            {
                var players = ClientRetriever.GetAuthenticatedClients()
                              .Where(c => !Equals(c, client) && c.Subspace == s.Key)
                              .Select(c => c.PlayerName)
                              .ToArray();

                return(new SubspaceInfo
                {
                    PlayerCount = players.Length,
                    Players = players,
                    SubspaceKey = s.Key,
                    SubspaceTime = s.Value.Time
                });
            }).ToArray();


            msgData.Subspaces     = subspaces;
            msgData.SubspaceCount = subspaces.Length;

            MessageQueuer.SendToClient <WarpSrvMsg>(client, msgData);
        }
        public override bool Execute(string commandArgs)
        {
            CommandSystemHelperMethods.SplitCommand(commandArgs, out var playerName, out var reason);
            reason = string.IsNullOrEmpty(reason) ? "No reason specified" : reason;

            if (!string.IsNullOrEmpty(playerName))
            {
                var player = ClientRetriever.GetClientByName(playerName);

                if (player != null)
                {
                    MessageQueuer.SendConnectionEnd(player, $"You were banned from the server: {reason}");
                    Add(player.UniqueIdentifier);
                    LunaLog.Normal($"Player '{playerName}' was banned from the server: {reason}");
                    return(true);
                }
                else
                {
                    LunaLog.Normal($"Player '{playerName}' not found");
                }
            }
            else
            {
                LunaLog.Normal("Undefined function. Usage: /ban [username] [reason]");
            }

            return(false);
        }
Пример #7
0
        public override void Execute(string commandArgs)
        {
            string playerName;
            string reason;

            CommandSystemHelperMethods.SplitCommand(commandArgs, out playerName, out reason);
            reason = string.IsNullOrEmpty(reason) ? "No reason specified" : reason;

            if (!string.IsNullOrEmpty(playerName))
            {
                var player = ClientRetriever.GetClientByName(playerName);

                if (player != null)
                {
                    MessageQueuer.SendConnectionEnd(player, $"You were banned from the server: {reason}");
                }

                Add(playerName);
                LunaLog.Normal($"Player '{playerName}' was banned from the server: {reason}");
            }
            else
            {
                LunaLog.Normal($"Player: {playerName} not found");
            }
        }
Пример #8
0
        public override void Execute(string commandArgs)
        {
            string ip;
            string reason;

            CommandSystemHelperMethods.SplitCommand(commandArgs, out ip, out reason);
            reason = string.IsNullOrEmpty(reason) ? "No reason specified" : reason;

            IPAddress ipAddress;

            if (IPAddress.TryParse(ip, out ipAddress))
            {
                var player = ClientRetriever.GetClientByIp(ipAddress);

                if (player != null)
                {
                    MessageQueuer.SendConnectionEnd(player, $"You were banned from the server: {reason}");
                }

                Add(ipAddress.ToString());
                LunaLog.Normal($"IP Address '{ip}' was banned from the server: {reason}");
            }
            else
            {
                LunaLog.Normal($"{ip} is not a valid IP address");
            }
        }
 private bool CheckServerFull(ClientStructure client)
 {
     if (ClientRetriever.GetActiveClientCount() >= GeneralSettings.SettingsStore.MaxPlayers)
     {
         Reason = "Server full";
         HandshakeSystemSender.SendHandshakeReply(client, HandshakeReply.ServerFull, Reason);
         return(false);
     }
     return(true);
 }
        private bool CheckPlayerIsAlreadyConnected(ClientStructure client, string playerName)
        {
            var existingClient = ClientRetriever.GetClientByName(playerName);

            if (existingClient != null)
            {
                Reason = "Username already taken";
                HandshakeSystemSender.SendHandshakeReply(client, HandshakeReply.InvalidPlayername, Reason);
                return(false);
            }
            return(true);
        }
Пример #11
0
        public static void SendAllSubspaces(ClientStructure client)
        {
            LunaLog.Debug($"Sending {client.PlayerName} {WarpContext.Subspaces.Count} possible subspaces");

            MessageQueuer.SendToClient <WarpSrvMsg>(client, new WarpSubspacesReplyMsgData
            {
                SubspaceTime = WarpContext.Subspaces.Values.ToArray(),
                SubspaceKey  = WarpContext.Subspaces.Keys.ToArray(),
                Players      = ClientRetriever.GetAuthenticatedClients().Where(c => c != client)
                               .Select(p => new KeyValuePair <int, string>(p.Subspace, p.PlayerName)).ToArray()
            });
        }
Пример #12
0
        public static void SendConsoleMessageToAdmins(string text)
        {
            var admins = AdminCommands.Admins;

            foreach (var client in ClientRetriever.GetAuthenticatedClients().Where(c => admins.Contains(c.PlayerName)))
            {
                var messageData = ServerContext.ServerMessageFactory.CreateNewMessageData <ChatConsoleMsgData>();
                messageData.From    = GeneralSettings.SettingsStore.ConsoleIdentifier;
                messageData.Message = text;

                MessageQueuer.SendToClient <ChatSrvMsg>(client, messageData);
            }
        }
Пример #13
0
        private static void SendAllPlayerColors(ClientStructure client)
        {
            var msgData = ServerContext.ServerMessageFactory.CreateNewMessageData <PlayerColorReplyMsgData>();

            msgData.PlayersColors = ClientRetriever.GetAuthenticatedClients().Where(c => !Equals(c, client))
                                    .Select(c => new PlayerColor
            {
                PlayerName = c.PlayerName,
                Color      = c.PlayerColor
            }).ToArray();
            msgData.PlayerColorsCount = msgData.PlayersColors.Length;

            MessageQueuer.SendToClient <PlayerColorSrvMsg>(client, msgData);
        }
Пример #14
0
        public override void Execute(string commandArgs)
        {
            CommandSystemHelperMethods.SplitCommand(commandArgs, out var publicKey, out var reason);
            reason = string.IsNullOrEmpty(reason) ? "No reason specified" : reason;

            var player = ClientRetriever.GetClientByPublicKey(publicKey);

            if (player != null)
            {
                MessageQueuer.SendConnectionEnd(player, $"You were banned from the server: {reason}");
            }

            Add(publicKey);
            LunaLog.Normal($"Public key '{publicKey}' was banned from the server: {reason}");
        }
Пример #15
0
        public static void SendConsoleMessageToAdmins(string text)
        {
            var admins = AdminCommands.Retrieve();

            foreach (var client in ClientRetriever.GetAuthenticatedClients().Where(c => admins.Contains(c.PlayerName)))
            {
                var messageData = new ChatConsoleMsgData
                {
                    From    = GeneralSettings.SettingsStore.ConsoleIdentifier,
                    Message = text
                };

                MessageQueuer.SendToClient <ChatSrvMsg>(client, messageData);
            }
        }
Пример #16
0
        public override void Execute(string commandArgs)
        {
            //Do some shit here.
            long bytesSentTotal     = 0;
            long bytesReceivedTotal = 0;

            LunaLog.Normal("Connection stats:");
            foreach (var client in ClientRetriever.GetAuthenticatedClients())
            {
                bytesSentTotal     += client.BytesSent;
                bytesReceivedTotal += client.BytesReceived;
                LunaLog.Normal(
                    $"Player '{client.PlayerName}', sent: {client.BytesSent}, received: {client.BytesReceived}");
            }
            LunaLog.Normal($"Server sent: {bytesSentTotal}, received: {bytesReceivedTotal}");
        }
Пример #17
0
        private static void SendAllPlayerColors(ClientStructure client)
        {
            var sendColors = new Dictionary <string, string>();

            foreach (var otherClient in ClientRetriever.GetAuthenticatedClients().Where(c => !Equals(c, client) && c.PlayerColor != null))
            {
                sendColors[otherClient.PlayerName] = otherClient.PlayerColor;
            }

            var newMessageData = new PlayerColorReplyMsgData
            {
                Count         = sendColors.Count,
                PlayersColors = sendColors.ToArray()
            };

            MessageQueuer.SendToClient <PlayerColorSrvMsg>(client, newMessageData);
        }
        public override bool Execute(string commandArgs)
        {
            //Do some shit here.
            long bytesSentTotal     = 0;
            long bytesReceivedTotal = 0;

            LunaLog.Normal("Connection stats:");
            LunaLog.Normal($"Nist Time Difference: {LunaNetworkTime.TimeDifference.TotalMilliseconds} ms");
            foreach (var client in ClientRetriever.GetAuthenticatedClients())
            {
                bytesSentTotal     += client.BytesSent;
                bytesReceivedTotal += client.BytesReceived;
                LunaLog.Normal(
                    $"Player '{client.PlayerName}', sent: {client.BytesSent}, received: {client.BytesReceived}");
            }
            LunaLog.Normal($"Server sent: {bytesSentTotal}, received: {bytesReceivedTotal}");

            return(true);
        }
        public override bool Execute(string commandArgs)
        {
            //Do some shit here.
            ulong bytesSentTotal     = 0;
            ulong bytesReceivedTotal = 0;

            LunaLog.Normal("Connection stats:");
            LunaLog.Normal($"Nist Time Difference: {LunaNetworkTime.TimeDifference.TotalMilliseconds} ms");
            foreach (var client in ClientRetriever.GetAuthenticatedClients())
            {
                bytesSentTotal     += client.BytesSent;
                bytesReceivedTotal += client.BytesReceived;
                LunaLog.Normal(
                    $"Server sent: {(float)client.BytesSent/1024} KB, received: {(float)client.BytesReceived/1024} KB from '{client.PlayerName}'");
            }
            LunaLog.Normal($"Server sent: {((float)bytesSentTotal/1024)/1024} MB, received: {((float)bytesReceivedTotal/1024)/1024} MB in total amongst above players.");

            return(true);
        }
Пример #20
0
 public void HandlePrivateMessage(ClientStructure client, ChatPrivateMsgData message)
 {
     if (message.To != GeneralSettings.SettingsStore.ConsoleIdentifier)
     {
         var findClient = ClientRetriever.GetClientByName(message.To);
         if (findClient != null)
         {
             MessageQueuer.SendToClient <ChatSrvMsg>(client, message);     //Send it to the sender
             MessageQueuer.SendToClient <ChatSrvMsg>(findClient, message); //Send it to destination
             LunaLog.ChatMessage($"{message.From} -> @{message.To}: {message.Text}");
         }
         else
         {
             LunaLog.ChatMessage($"{message.From} -X-> @{message.To}: {message.Text}");
         }
     }
     else
     {
         //Send it to the sender only as we as server already received it
         MessageQueuer.SendToClient <ChatSrvMsg>(client, message);
         LunaLog.ChatMessage($"{message.From} -> @{message.To}: {message.Text}");
     }
 }
Пример #21
0
        public void HandleHandshakeResponse(ClientStructure client, HandshakeResponseMsgData data)
        {
            var valid = CheckServerFull(client);

            valid &= valid && CheckUsernameLength(client, data.PlayerName);
            valid &= valid && CheckUsernameCharacters(client, data.PlayerName);
            valid &= valid && CheckWhitelist(client, data.PlayerName);
            valid &= valid && CheckPlayerIsAlreadyConnected(client, data.PlayerName);
            valid &= valid && CheckUsernameIsReserved(client, data.PlayerName);
            valid &= valid && CheckPlayerIsBanned(client, data.PlayerName, client.Endpoint.Address.ToString(), data.PublicKey);
            valid &= valid && CheckKey(client, data.PlayerName, data.PublicKey, data.ChallengeSignature);

            if (!valid)
            {
                LunaLog.Normal($"Client {data.PlayerName} failed to handshake: {Reason}. Disconnecting");
                client.DisconnectClient = true;
                ClientConnectionHandler.DisconnectClient(client, Reason);
            }
            else
            {
                client.PlayerName    = data.PlayerName;
                client.PublicKey     = data.PublicKey;
                client.Authenticated = true;

                LmpPluginHandler.FireOnClientAuthenticated(client);

                LunaLog.Normal($"Client {data.PlayerName} handshook successfully, Version: {data.Version}");

                CreatePlayerScenarioFiles(client, data.PlayerName);

                HandshakeSystemSender.SendHandshakeReply(client, HandshakeReply.HandshookSuccessfully, "success");
                MessageQueuer.RelayMessage <PlayerConnectionSrvMsg>(client, new PlayerConnectionJoinMsgData {
                    PlayerName = client.PlayerName
                });

                LunaLog.Debug($"Online Players: {ServerContext.PlayerCount}, connected: {ClientRetriever.GetClients().Length}");
            }
        }
Пример #22
0
        public void HandleHandshakeRequest(ClientStructure client, HandshakeRequestMsgData data)
        {
            var valid = CheckServerFull(client);

            valid &= valid && CheckUsernameLength(client, data.PlayerName);
            valid &= valid && CheckUsernameCharacters(client, data.PlayerName);
            valid &= valid && CheckPlayerIsAlreadyConnected(client, data.PlayerName);
            valid &= valid && CheckUsernameIsReserved(client, data.PlayerName);
            valid &= valid && CheckPlayerIsBanned(client, data.UniqueIdentifier);

            if (!valid)
            {
                LunaLog.Normal($"Client {data.PlayerName} ({data.UniqueIdentifier}) failed to handshake: {Reason}. Disconnecting");
                client.DisconnectClient = true;
                ClientConnectionHandler.DisconnectClient(client, Reason);
            }
            else
            {
                client.PlayerName       = data.PlayerName;
                client.UniqueIdentifier = data.UniqueIdentifier;
                client.Authenticated    = true;

                LmpPluginHandler.FireOnClientAuthenticated(client);

                LunaLog.Normal($"Client {data.PlayerName} ({data.UniqueIdentifier}) handshake successfully, Version: {data.MajorVersion}.{data.MinorVersion}.{data.BuildVersion}");

                HandshakeSystemSender.SendHandshakeReply(client, HandshakeReply.HandshookSuccessfully, "success");

                var msgData = ServerContext.ServerMessageFactory.CreateNewMessageData <PlayerConnectionJoinMsgData>();
                msgData.PlayerName = client.PlayerName;
                MessageQueuer.RelayMessage <PlayerConnectionSrvMsg>(client, msgData);

                LunaLog.Debug($"Online Players: {ServerContext.PlayerCount}, connected: {ClientRetriever.GetClients().Length}");
            }
        }
Пример #23
0
 protected static ClientStructure[] GetClientsInChannel(string channel)
 {
     return(PlayerChatChannels.Where(p => p.Value.Contains(channel))
            .Select(p => ClientRetriever.GetClientByName(p.Key)).Where(c => c != null).ToArray());
 }