private void TcpClient_MessageReceived(object sender, TcpRawMessageReceivedEventArgs args)
        {
            if (!IsRunning)
            {
                return;
            }
            TcpClientEx clientEx      = sender as TcpClientEx;
            long        proxyClientID = (long)clientEx.Tag;

            if (DataFilter != null)
            {
                DataFilter.BeforeServerToClient(new TcpRawMessage
                {
                    ClientID       = proxyClientID,
                    MessageRawData = args.Message.MessageRawData
                });
            }
            try
            {
                //the method may throw exception when stopping, so try catch is used but do nothing.
                _server.SendMessage(proxyClientID, args.Message.MessageRawData.ToArray());
            }
            catch { }
        }