private void ThreadStartListening()
        {
            int ErrorCount = 0;

            do
            {
                try
                {
                    if (TcpClient.Available > -1)
                    {
                        string PackageString = Reader.ReadLine();

                        if (!string.IsNullOrWhiteSpace(PackageString))
                        {
                            ThreadPool.QueueWorkItem(() =>
                            {
                                Package Package = new Package(PackageString, TcpClient);

                                if (Package.IsValid)
                                    Package.Handle();

                                Core.Logger.Debug($"Receive: {PackageString}", TcpClient);
                            });

                            ErrorCount = 0;
                        }
                        else
                        {
                            ErrorCount++;

                            if (ErrorCount > 10)
                            {
                                Core.Logger.Debug("Too much error received from the client.", TcpClient);
                                throw new Exception("Too much error received from the client.");
                            }
                        }
                    }
                    else
                    {
                        Core.Logger.Debug("Unexpected error occured.", TcpClient);
                        throw new Exception("Unexpected error occured.");
                    } 
                }
                catch (Exception)
                {
                    if (IsActive)
                    {
                        IsActive = false;
                        Dispose();
                    }
                }
            } while (IsActive);
        }
        private void ThreadAcceptTcpClient(TcpClient Client)
        {
            try
            {
                if (Client != null)
                {
                    StreamReader Reader = new StreamReader(Client.GetStream());
                    string ReturnMessage = Reader.ReadLine();

                    if (!string.IsNullOrWhiteSpace(ReturnMessage))
                    {
                        Package Package = new Package(ReturnMessage, Client);
                        Core.Logger.Log($"Receive: {ReturnMessage}", Logger.LogTypes.Debug, Client);

                        if (Package.IsValid)
                        {
                            Package.Handle();
                        }
                    }
                }
            }
            catch (Exception) { }
        }
 private void ThreadHandlePackage(Package p)
 {
     p.Handle();
 }