Close() public method

关闭相关资源
public Close ( ) : void
return void
Example #1
0
        public void Upload(Socket connection, byte[] handshakeMsg, int handshakeMsgLength)
        {
            if (closed)
            {
                return;
            }
            lastActivity = DateTime.Now;

            var state = new FileTransmitState
            {
                Connection = connection,
            };

            try
            {
                byte[] response    = { 1, 0x10, 0 };//Succeed msg
                var    fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6);

                if (string.IsNullOrEmpty(fileInfoStr))
                {
                    Logging.Error("FileInfo Error,response X'40'");
                    response[1] = 0x40; //Client Msg Error
                }
                else
                {
                    var fileInfoArray = fileInfoStr.Split('|');
                    if (fileInfoArray.Length != 2)
                    {
                        Logging.Error("FileInfo Error,response X'40'");
                        response[1] = 0x40; //Client Msg Error
                    }
                    else
                    {
                        state.DealingByteCount = 0;
                        state.Buffer           = null;
                        state.FileName         = fileInfoArray[0];
                        state.FileSize         = Convert.ToInt32(fileInfoArray[1]);
                        if (!Util.CheckDiskSpace(FileServerDir, state.FileSize))
                        {
                            response[1] = 0x51; //Not enough diskspace Msg Error
                        }
                    }
                }
                if (response[1] != 0x10)
                {
                    state.Connection.BeginSend(response, 0, response.Length, 0, UploadFinishingCallBack, state);
                    return;
                }
                state.Connection.BeginSend(response, 0, response.Length, 0, UploadHandshakeSendCallback, state);
            }
            catch (Exception e)
            {
                Logging.Debug("握手过程中发生异常");
                Logging.LogUsefulException(e);
                state.Close();
            }
        }
        public void Upload(Socket connection, byte[] handshakeMsg, int handshakeMsgLength)
        {
            if (closed)
            {
                return;
            }
            lastActivity = DateTime.Now;

            var state = new FileTransmitState
            {
                Connection = connection,
            };
            try
            {
                byte[] response = { 1, 0x10, 0 };//Succeed msg
                var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6);

                if (string.IsNullOrEmpty(fileInfoStr))
                {
                    Logging.Error("FileInfo Error,response X'40'");
                    response[1] = 0x40; //Client Msg Error
                }
                else
                {
                    var fileInfoArray = fileInfoStr.Split('|');
                    if (fileInfoArray.Length != 2)
                    {
                        Logging.Error("FileInfo Error,response X'40'");
                        response[1] = 0x40; //Client Msg Error
                    }
                    else
                    {
                        state.DealingByteCount = 0;
                        state.Buffer = null;
                        state.FileName = fileInfoArray[0];
                        state.FileSize = Convert.ToInt32(fileInfoArray[1]);
                        if (!Util.CheckDiskSpace(FileServerDir, state.FileSize))
                        {
                            response[1] = 0x51; //Not enough diskspace Msg Error
                        }
                    }
                }
                if (response[1] != 0x10)
                {
                    state.Connection.BeginSend(response, 0, response.Length, 0, UploadFinishingCallBack, state);
                    return;
                }
                state.Connection.BeginSend(response, 0, response.Length, 0, UploadHandshakeSendCallback, state);
            }
            catch (Exception e)
            {
                Logging.Debug("握手过程中发生异常");
                Logging.LogUsefulException(e);
                state.Close();
            }
        }
Example #3
0
 private void Close(FileTransmitState transmitState)
 {
     lock (this)
     {
         if (closed)
         {
             return;
         }
         closed = true;
     }
     transmitState?.Close();
 }
        /// <summary>
        /// 文件下载服务处理
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="handshakeMsg"></param>
        /// <param name="handshakeMsgLength"></param>
        public void Download(Socket connection, byte[] handshakeMsg, int handshakeMsgLength)
        {
            if (closed)
            {
                return;
            }
            lastActivity = DateTime.Now;

            var state = new FileTransmitState
            {
                Connection = connection,
            };
            try
            {
                List<byte> response = new List<byte> { 1, 0x10, 0 };//Succeed msg
                var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6);

                if (string.IsNullOrEmpty(fileInfoStr))
                {
                    Logging.Error("FileInfo Error,response X'40'");
                    response[1] = 0x41; //Client Msg Error
                }
                else
                {

                    var path = Path.Combine(FileServerDir, fileInfoStr);
                    if (!File.Exists(path))
                    {
                        response[1] = 0x44; //File Not Found
                    }
                    else
                    {
                        state.FileInfo = new FileInfo(path);
                        state.FileSize = state.FileInfo.Length;
                        state.DealingByteCount = 0;


                        state.FileName = state.FileInfo.Name;
                        //使用“|做分隔符”
                        var fileLengthBytes = Encoding.UTF8.GetBytes(state.FileInfo.Length + "|");
                        response.AddRange(fileLengthBytes);
                        state.Buffer = new byte[BufferSize];
                    }
                    //config.FileSize = Convert.ToInt32(fileInfoArray[1]);
                }
                state.Connection.Send(response.ToArray());
                if (response[1] != 0x10)
                {
                    //Error
                    state.Close();
                }
                else
                {

                    state.Connection.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None,
                        After2ndHandshakeCallback, state);
                }
            }
            catch (Exception e)
            {
                Logging.Debug("握手过程中发生异常");
                Logging.LogUsefulException(e);
                state.Close();
            }
        }
Example #5
0
        /// <summary>
        /// 文件下载服务处理
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="handshakeMsg"></param>
        /// <param name="handshakeMsgLength"></param>
        public void Download(Socket connection, byte[] handshakeMsg, int handshakeMsgLength)
        {
            if (closed)
            {
                return;
            }
            lastActivity = DateTime.Now;

            var state = new FileTransmitState
            {
                Connection = connection,
            };

            try
            {
                List <byte> response = new List <byte> {
                    1, 0x10, 0
                };                                                  //Succeed msg
                var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6);

                if (string.IsNullOrEmpty(fileInfoStr))
                {
                    Logging.Error("FileInfo Error,response X'40'");
                    response[1] = 0x41; //Client Msg Error
                }
                else
                {
                    var path = Path.Combine(FileServerDir, fileInfoStr);
                    if (!File.Exists(path))
                    {
                        response[1] = 0x44; //File Not Found
                    }
                    else
                    {
                        state.FileInfo         = new FileInfo(path);
                        state.FileSize         = state.FileInfo.Length;
                        state.DealingByteCount = 0;


                        state.FileName = state.FileInfo.Name;
                        //使用“|做分隔符”
                        var fileLengthBytes = Encoding.UTF8.GetBytes(state.FileInfo.Length + "|");
                        response.AddRange(fileLengthBytes);
                        state.Buffer = new byte[BufferSize];
                    }
                    //config.FileSize = Convert.ToInt32(fileInfoArray[1]);
                }
                state.Connection.Send(response.ToArray());
                if (response[1] != 0x10)
                {
                    //Error
                    state.Close();
                }
                else
                {
                    state.Connection.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None,
                                                  After2ndHandshakeCallback, state);
                }
            }
            catch (Exception e)
            {
                Logging.Debug("握手过程中发生异常");
                Logging.LogUsefulException(e);
                state.Close();
            }
        }