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));
            }
        }
Example #2
0
        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();
        }