⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csock_info.cs

📁 自定义协议
💻 CS
📖 第 1 页 / 共 2 页
字号:
							szFloder = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFloder);
							logs(szFloder);
							if (!Directory.Exists(szFloder))
							{
								bResult = ResultPacket(defcmd.RND, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							
							String szNewFloder = Encoding.GetEncoding(936).GetString(Packet, nIndex+1, SearchChar(Packet, nIndex + 1)-nIndex-1);
							szNewFloder = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szNewFloder);
							logs(szNewFloder);
							if (Directory.Exists(szNewFloder))
							{
								bResult = ResultPacket(defcmd.RND, defcmd.MKDEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							Directory.Move(szFloder, szNewFloder);

							bResult = ResultPacket(defcmd.RND, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();

						break;

					case defcmd.RNF:
						logs("cc请求修改文件夹名字");

						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.RNF);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							//创建目录信息不足
							if (Packet.Length <= 8)
							{
								bResult = ResultPacket(defcmd.RNF, defcmd.RNFERROR);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							nIndex = SearchChar(Packet, 8);
							String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, nIndex - 8);
							szFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
							logs(szFile);
							if (!File.Exists(szFile))
							{
								bResult = ResultPacket(defcmd.RNF, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							
							String szNewFile = Encoding.GetEncoding(936).GetString(Packet, nIndex+1, SearchChar(Packet, nIndex + 1)-nIndex-1);
							szNewFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szNewFile);
							logs(szNewFile);
							if (File.Exists(szNewFile))
							{
								bResult = ResultPacket(defcmd.RNF, defcmd.MKDEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							File.Move(szFile, szNewFile);

							bResult = ResultPacket(defcmd.RNF, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();

						break;

					case defcmd.CWD:
						logs("请求改变当前目录");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.CWD);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{

							String szFloder = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
							logs(szFloder);
							if (szFloder == "/")
							{
								logs("root");
								bResult = ResultPacket(defcmd.CWD, defcmd.OK);
								stream.Write(bResult, 0, bResult.Length);
								stream.Flush();
								m_sPath = "";

								break;
							}

							String szFloder_test = String.Format("{0}/{1}{2}",defcmd.CMS_HOME,m_sAccount_Home,szFloder);
							logs(szFloder_test);
							if (!Directory.Exists(szFloder_test))
							{
								bResult = ResultPacket(defcmd.CWD, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							m_sPath = szFloder;
							bResult = ResultPacket(defcmd.CWD, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();

						break;

					case defcmd.PWD:
						logs("请求改变当前目录");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.PWD);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							if (null == (bResult = ResultPacket(defcmd.PWD, defcmd.OK)))
								bResult = ResultPacket(defcmd.UNKNOWERROR, defcmd.PWD);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();
						break;

					case defcmd.DELE:
						logs("请求删除文件!");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.DELE);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);

							String szFilePath = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
							if (!File.Exists(szFilePath))
							{
								bResult = ResultPacket(defcmd.DELE, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}

							File.Delete(szFilePath);

							if (null == (bResult = ResultPacket(defcmd.DELE, defcmd.OK)))
								bResult = ResultPacket(defcmd.UNKNOWERROR, defcmd.DELE);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();
						break;

					default:
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, cmd);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							bResult = ResultPacket(cmd, defcmd.UNKNOWERROR);
							stream.Write(bResult, 0, bResult.Length);
						}

						stream.Flush();
						break;


				}
			}
			catch(Exception ep)
			{
				logs("[ParseCC_Cmd]error:" + ep.Message);
				return;
			}
		}

		private byte [] ResultPacket(int PacketType, int Result)
		{
			MemoryStream ms = null;
			byte [] bTmp = null;
			try
			{
				switch(PacketType)
				{
					case defcmd.CONNECT:
						bTmp = new byte[17];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(17), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CONNECT), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
						//result
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 12, 4);
						//Version
						bTmp[16] = defcmd.Version;
					
						return bTmp;
					case defcmd.ACTIION_TEST:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.ACTIION_TEST), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;
					case defcmd.NOTCONNECT:
						bTmp = new byte[31];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(31), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.NOTCONNECT), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
						//result
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes("NOTCONNECT\n"), 0, bTmp, 20, 11);

						return bTmp;
					case defcmd.FLALL:
						String szFolder = String.Format("{0}/{1}{2}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath);
						logs("当前路径为:"+szFolder);
						DirectoryInfo di = new DirectoryInfo(szFolder);
						FileSystemInfo[] dirs = di.GetFileSystemInfos();
					
						//打包包体
						ms = new MemoryStream();
						Type dtype = Type.GetType("System.IO.DirectoryInfo");
						foreach (FileSystemInfo fsi in dirs) 
						{
							logs(String.Format("{0}\n", fsi.Name));
							byte []bName = null;
							if (fsi.GetType().Equals(dtype))
							{
								bName = Encoding.GetEncoding(936).GetBytes(String.Format("D{0}\n", fsi.Name));
								ms.Write(bName, 0, bName.Length);
							}
							else
							{
								bName = Encoding.GetEncoding(936).GetBytes(String.Format("F{0}\n", fsi.Name));
								ms.Write(bName, 0, bName.Length);
							}
						}
						if (ms.Length <= 0)
							ms.Write(Encoding.GetEncoding(936).GetBytes("nofileslist\n"), 0, 12);

						bTmp = new byte[ms.Length + 20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(ms.Length + 20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.FLALL), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
						//pack body
						Buffer.BlockCopy(ms.ToArray(), 0, bTmp, 20, (int)ms.Length);
						ms.Close();
						di = null;

						return bTmp;
					case defcmd.MKD:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.MKD), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
					
						return bTmp;

					case defcmd.RMD:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RMD), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.RND:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RND), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.RNF:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RNF), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.CWD:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CWD), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.PWD:
						ms = new MemoryStream();
						if ("" == m_sPath || null == m_sPath)
							bTmp = Encoding.GetEncoding(936).GetBytes("/\n");
						else
							bTmp = Encoding.GetEncoding(936).GetBytes(m_sPath+"\n");
						ms.Write(bTmp, 0, bTmp.Length);
						//打包
						bTmp = new byte[ms.Length + 20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.PWD), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
						//curr_path
						Buffer.BlockCopy(ms.ToArray(), 0, bTmp, 20, (int)ms.Length);

						return bTmp;

					case defcmd.DELE:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DELE), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					default:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UNKNOWERROR), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
						return bTmp;
				}
			}
			catch(Exception ep)
			{
				logs("[ResultPacket]error:" + ep.Message);
				return null;
			}		
		
		}

		private bool CheckUser(String Account, byte [] Sour, String Timestamp)
		{
			/*
			String szPack = "";
			for (int i = 0 ; i < Sour.Length; i ++)
				szPack = String.Format("{0}[{1}]", szPack, Sour[i]);

			logs(szPack);
			*/
			//打包AuthenticatorSource
			byte [] bTmp = Encoding.GetEncoding(936).GetBytes(String.Format("{0}000000000{1}000000000{2}", Account, "123", Timestamp));
			// This is one implementation of the abstract class MD5.
			MD5 md5 = new MD5CryptoServiceProvider();
			bTmp = md5.ComputeHash(bTmp);
			md5 = null;

			if (bTmp.Length != Sour.Length)
				return false;

			for (int i = 0 ; i < Sour.Length; i ++)
				if (bTmp[i] != Sour[i])
					return false;
			return true;
		}

		/// <summary>
		/// 查找数组位置
		/// </summary>
		/// <param name="Value">源数组</param>
		/// <returns>字符'\n'位置</returns>
		private int SearchChar(byte [] Value)
		{
			for(int i=0; i< Value.Length; i++)
			{
				if (Value[i] == 10)
					return i;
			}

			return -1;
		}
		/// <summary>
		/// 从指定数组位置中开始查找字符位置
		/// </summary>
		/// <param name="Value">源数组</param>
		/// <param name="index">源数组开始位置</param>
		/// <returns>字符'\n'位置</returns>
		private int SearchChar(byte [] Value, int index)
		{
			for(int i=index; i< Value.Length; i++)
			{
				if (Value[i] == 10)
					return i;
			}

			return -1;
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -