private async Task DeleteClient(ConnectedClient client) { await mutex.WaitAsync(); ServerChatMessage sm = null; try { clients.Remove(client); var st = new Status(); st.DeleteClient = client.Username; st.CurrentClients.Add(clients.Select(x => x.Username).ToList()); sm = new ServerChatMessage(); sm.Status = st; logger.Info($"DeleteClient: Username='******'"); } catch (Exception ex) { logger.Error(ex, $"!!! DeleteClient Exception: Username='******' !!! {ex.Message}"); sm = null; } finally { mutex.Release(); } if (sm != null) { await Broadcast(sm); } }
private async Task Broadcast(ChatMessage cm) { var sm = new ServerChatMessage() { Message = cm }; await Broadcast(sm); }
private void Process(ServerChatMessage sm) { if (sm.Status != null) { Process(sm.Status); } if (sm.Message != null) { Process(sm.Message); } }
/// <summary> /// Called when a chat message is sent /// </summary> /// <param name="console">The server GUI - provides access to the underlying server process</param> /// <param name="message">The chat message</param> public void OnChatMessage(IServerConsole console, ServerChatMessage message) { foreach (IPlugin plugin in Enabled) { try { plugin.OnChatMessage(console, message); } catch (Exception ex) { console.DisplayLine($"Error in method OnChatMessage for plugin {plugin.Name}: {ex}", red); } } }
private async Task Broadcast(ServerChatMessage sm) { await mutex.WaitAsync(); var sw = System.Diagnostics.Stopwatch.StartNew(); Task tasks = null; try { var taskList = clients.Select(c => Task.Run(async() => { try { await c.ChatWriter.WriteAsync(sm); } catch (Exception ex) { ex.Data.Add("ClientObject", c); ex.Data.Add("Username", c?.Username); ex.Data.Add("Guid", c?.Guid); throw; } })); tasks = Task.WhenAll(taskList); await tasks; logger.Info($"Broadcast: {(sm.Message != null ? "ChatMessage" : string.Empty)} {(sm.Status != null ? "Status" : string.Empty)} ClientCount={clients.Count} Elapsed={sw.Elapsed:G}"); } catch (Exception ex) { logger.Error($"!!! Broadcast Exception: {ex.Message}"); tasks?.Exception?.Handle(ex => { logger.Error(ex, $"!!! Broadcast Exception: Username='******' !!! {ex.Message}"); return(true); }); } finally { mutex.Release(); } }
protected override void InternalParse() { m_message = new ServerChatMessage(this.Reader, (WowOpcodes)this.Packet.Opcode); Output.Append(m_message.ToString()); }
public void OnChatMessage(IServerConsole console, ServerChatMessage message) { chatMessages.AddLast(message); }
public void OnChatMessage(IServerConsole console, ServerChatMessage message) { }