private void OnServerUpdate(ServerUpdateMessage message)
        {
            var logger = _logger.ForContext("Message", message.ToJson());

            _mutex.EnterWriteLock();

            try
            {
                logger.Debug("Updating...");
                var id = (uint)(message.Id << 8 | (byte)message.ServerType);
                _servers[id] = new ServerInfo(new ServerInfoDto
                {
                    Id           = id,
                    GroupId      = message.Id,
                    Type         = message.ServerType,
                    Name         = message.Name,
                    PlayerLimit  = message.Limit,
                    PlayerOnline = message.Online,
                    EndPoint     = message.EndPoint,
                    IsEnabled    = true
                }, DateTimeOffset.Now);
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Unable to update server");
            }
            finally
            {
                _mutex.ExitWriteLock();
            }
        }
Exemplo n.º 2
0
        private void Handle(ServerUpdateMessage message)
        {
            if (WorldServer.CharsCount == message.CharsCount)
            {
                Client.ReplyRequest(new CommonOKMessage(), message);
                return;
            }

            WorldServer.CharsCount = message.CharsCount;

            if (WorldServer.CharsCount >= WorldServer.CharCapacity &&
                WorldServer.Status == ServerStatusEnum.ONLINE)
            {
                Managers.WorldServerManager.Instance.ChangeWorldState(WorldServer, ServerStatusEnum.FULL);
            }

            if (WorldServer.CharsCount < WorldServer.CharCapacity &&
                WorldServer.Status == ServerStatusEnum.FULL)
            {
                Managers.WorldServerManager.Instance.ChangeWorldState(WorldServer, ServerStatusEnum.ONLINE);
            }

            Database.Update(WorldServer);
            Client.ReplyRequest(new CommonOKMessage(), message);
        }
Exemplo n.º 3
0
        public async Task <ServerUpdateMessage> GetServerUpdates(string currentUser, string recipient)
        {
            await client.SendUpdateToServer(recipient ?? string.Empty, string.Empty);

            string[] serverUpdateMessage = await client.ReceiveMsgFromServer();

            string users = serverUpdateMessage[5];
            var    sum   = new ServerUpdateMessage {
                Users = getUsers(currentUser, users), ParticipantName = serverUpdateMessage[3], ChatData = serverUpdateMessage[1]
            };

            return(sum);
        }
Exemplo n.º 4
0
        private void processServerUpdate(ServerUpdateMessage message)
        {
            // Recieved
            var snapshot = new Snapshot(-1, clientCubes);
            var buffer   = message.Packet.buffer;

            snapshot.Deserialize(buffer, this);

            int interpolationBufferSize = interpolationBuffer.Count;

            if ((interpolationBufferSize == 0 ||
                 snapshot.GetPacketNumber() > interpolationBuffer[interpolationBufferSize - 1].GetPacketNumber()) &&
                interpolationBufferSize < requiredSnapshots + 1)
            {
                interpolationBuffer.Add(snapshot);
            }
        }
Exemplo n.º 5
0
        private async Task RunPeriodicAsync()
        {
            while (true)
            {
                Console.WriteLine(@"handling");
                if (IsConnected && IsLoggedIn)
                {
                    Console.WriteLine($@"Selected {SelectedParticipant?.Name}");
                    ServerUpdateMessage serverUpdateMessage = await chatService.GetServerUpdates(UserName, SelectedParticipant?.Name);

                    HandleServerUpdate(serverUpdateMessage);
                }

                // Wait to repeat again.
                await Task.Delay(TimeSpan.FromMilliseconds(200));
            }
        }
Exemplo n.º 6
0
        private void HandleServerUpdate(ServerUpdateMessage message)
        {
            var usersNames    = Participants.Select(p => p.Name).ToList();
            var new_usernames = message.Users.Select(p => p.Name).ToList();

            Console.WriteLine(usersNames.Count);
            message.Users?.Where(u => !usersNames.Contains(u.Name)).ForEach(ParticipantLogin);
            Participants.Where(par => new_usernames.Contains(par.Name) && !par.IsLoggedIn).ForEach(x => ParticipantReconnection(x.Name));
            Participants.Where(par => !new_usernames.Contains(par.Name) && par.IsLoggedIn).ForEach(x => ParticipantDisconnection(x.Name));
            if (SelectedParticipant != null &&
                SelectedParticipant.Name.Equals(message.ParticipantName) &&
                !string.IsNullOrEmpty(message.ChatData))
            {
                string[]           messages     = message.ChatData.Split(new[] { "&MAGSH_MESSAGE&" }, StringSplitOptions.RemoveEmptyEntries);
                List <ChatMessage> chatMessages = messages.Select(mes => new ChatMessage(mes, SelectedParticipant.Name)).
                                                  Where(mes => mes.Author.Equals(SelectedParticipant.Name)).ToList();
                chatMessages.GetRange(SelectedParticipant.NumberOfGotMessages, chatMessages.Count - SelectedParticipant.NumberOfGotMessages).
                ForEach(SelectedParticipant.Chatter.Add);
                SelectedParticipant.NumberOfGotMessages = chatMessages.Count;
            }
        }
Exemplo n.º 7
0
        private void Handle(ServerUpdateMessage message)
        {
            if (WorldServer.CharsCount == message.CharsCount)
            {
                Client.ReplyRequest(new CommonOKMessage(), message);
            }
            else
            {
                WorldServer.CharsCount = message.CharsCount;
                //dont give a f**k

                /*if (WorldServer.CharsCount >= WorldServer.CharsCount && WorldServer.Status == ServerStatusEnum.ONLINE)
                 * {
                 *  WorldServerManager.Instance.ChangeWorldState(WorldServer, ServerStatusEnum.FULL);
                 * }
                 * if (WorldServer.CharsCount < WorldServer.CharsCount && WorldServer.Status == ServerStatusEnum.FULL)
                 * {
                 *  WorldServerManager.Instance.ChangeWorldState(WorldServer, ServerStatusEnum.ONLINE);
                 * }*/
                Client.ReplyRequest(new CommonOKMessage(), message);
            }
        }