private void HandleError(string message, Exception ex = null, bool notifyUser = true) { if (ex != null) { _logger.LogError(message, ex); } if (notifyUser) { UserMessaged?.Invoke(this, new UserMessageEventArgs(message)); } }
private void StartReceive() { isReceiving = true; receiveThread = new Thread(() => { while (isReceiving) { if (pool.Count != 0) { for (int i = pool.Count - 1; i >= 0; i--) { if (pool[i].Handler.Available > 0) { var data = new byte[256]; pool[i].Handler.Receive(data); var content = Encoding.UTF8.GetString(data); content = content.TrimEnd('\0'); content = content.TrimEnd('\n'); UserMessaged?.Invoke(this, new GameEventArgs(pool[i], content)); handler.Handle(data, pool[i], this); } else { pool[i].NotReceived++; if (pool[i].NotReceived > ReceiveThreshold) { try { pool[i].Handler.Send(Encoding.UTF8.GetBytes("ack\n")); pool[i].NotReceived = 0; } catch { Kick(pool[i]); } } } } } Thread.Sleep(listenDelay); } }); receiveThread.IsBackground = true; receiveThread.Start(); }