public void ProcessBeginRequest()
        {
            UploadFileBeginResponse response = new UploadFileBeginResponse()
            {
                AllowUpload     = true,
                RequestID       = LastRequestID,
                UploadSessionID = UploadSessionID
            };

            if (IsRunning)
            {
                response.AllowUpload = false;
                response.Message     = "can not upload a new file because the last uploading is running.";
                _tcpServer.SendModelMessage(ClientID, response);
                return;
            }

            try
            {
                _fileStream = File.Open(SavePath, FileMode.Create, FileAccess.Write);
            }
            catch (Exception ex)
            {
                response.AllowUpload = false;
                response.Message     = ex.Message;
                _tcpServer.SendModelMessage(ClientID, response);
                return;
            }

            _tcpServer.SendModelMessage(ClientID, response);
            _isRunning = true;
            _cancelWaitEvent.Reset();
            _lastActiveTime = DateTime.Now;
            _cancelThread   = ThreadEx.Start(CancelProc);
        }
        protected virtual void OnTcpServer_MessageReceived(object sender, TcpRawMessageReceivedEventArgs args)
        {
            GeneralMessage clientMessage = GeneralMessage.Deserialize(args.Message.MessageRawData, false);

            //if the server message is model
            if (clientMessage.Header == (int)MessageHeader.Model)
            {
                //get model from general message
                object model = _tcpServer.ConvertToModel(clientMessage);
                if (model is QueryServerTimeRequest)
                {
                    QueryServerTimeRequest  queryTimeReq = model as QueryServerTimeRequest;
                    QueryServerTimeResponse response     = new QueryServerTimeResponse
                    {
                        RequestID  = queryTimeReq.ID,
                        ServerTime = DateTime.Now
                    };
                    ServerRecvText += $"Received Request:\r\nfrom {queryTimeReq.Name}\r\n";
                    _tcpServer.SendModelMessage(args.Message.ClientID, response);
                }
                else
                {
                    //do something for other model
                }
            }
            else
            {
            }
        }