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(); } }
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); }
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); }
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); } }
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)); } }
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; } }
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); } }