Exemple #1
0
 public void Message(EndPoint endPoint, string Messages)
 {
     messageBufferDict[endPoint] += Messages;
     if (messageBufferDict[endPoint].Contains("}"))
     {
         string[] messages = messageBufferDict[endPoint].Split(new char[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries);
         for (int i = 0; i < messages.Length - 1; i++)
         {
             ListMessageBict[endPoint].Add(Encoding.UTF8.GetString(Convert.FromBase64String(messages[i])));
         }
         if (Regex.Matches(messageBufferDict[endPoint], "{").Count != Regex.Matches(messageBufferDict[endPoint], "}").Count)
         {
             ListMessageBict[endPoint].Add(Encoding.UTF8.GetString(Convert.FromBase64String(messages.Last()))); messageBufferDict[endPoint] = "";
         }
         else
         {
             messageBufferDict[endPoint] = messages[messages.Length - 1];
         }
     }
     if (ListMessageBict[endPoint].Count > 0)
     {
         for (int i = 0; i < ListMessageBict[endPoint].Count; i++)
         {
             if (ListMessageBict[endPoint][i] != null && ListMessageBict[endPoint][i] != "")
             {
                 string[] Command = (ListMessageBict[endPoint][i]).Split(',');
                 if (Command[0] == "New")
                 {
                     Console.WriteLine($"{{{endPoint}}} 请求:{ListMessageBict[endPoint][i]}");
                     FileDataDict[endPoint].Add(Command[1], new List <byte[]>());
                     Console.WriteLine($"新文件;{Command[1]}");
                 }
                 else if (Command[0] == "Data")
                 {
                     byte[] FileByte = Convert.FromBase64String(Command[2]);
                     Console.WriteLine($"{{{endPoint.ToString()}}} 传输数据数据,所属文件:{Command[1]},长度:{FileByte.Length}");
                     FileDataDict[endPoint][Command[1]].Add(FileByte);
                 }
                 else if (Command[0] == "NewObject")
                 {
                     Console.WriteLine($"{{{endPoint.ToString()}}} 创建新传输:{Command[1]}");
                     if (Directory.Exists(Path + Command[1]))
                     {
                         Console.WriteLine($"报错:{Command[1]} 已经存在");
                         socketServer.Send(endPoint, Encoding.UTF8.GetBytes("{" + Convert.ToBase64String(Encoding.UTF8.GetBytes("DirIsHave," + Command[1])) + "}"));
                     }
                     else
                     {
                         FileDataDict.Add(endPoint, new Dictionary <string, List <byte[]> >());
                         Console.WriteLine($"新Object:{Command[1]}");
                     }
                 }
                 else if (Command[0] == "End")
                 {
                     Console.WriteLine($"文件{{{Command[1]}}}完成传输");
                     Thread Save = new Thread(new ThreadStart(() =>
                     {
                         List <byte> buffer = new List <byte>();
                         for (int ia = 0; ia < FileDataDict[endPoint][Command[1]].Count; ia++)
                         {
                             for (int ib = 0; ib < FileDataDict[endPoint][Command[1]][ia].Length; ib++)
                             {
                                 buffer.Add(FileDataDict[endPoint][Command[1]][ia][ib]);
                             }
                         }
                         File.WriteAllBytes(Path + Command[1], buffer.ToArray());
                         socketServer.Send(endPoint, Encoding.UTF8.GetBytes($"{{{Convert.ToBase64String(Encoding.UTF8.GetBytes($"FileOK,{Command[1]}"))}}}"));
                         Console.WriteLine($"文件保存完毕,位置:{Path + Command[1]}");
                     })); Save.Start();
                 }
                 else if (Command[0] == "Get")
                 {
                     Console.WriteLine($"{{{endPoint.ToString()}}}收到下载文件请求");
                     Thread Send = new Thread(new ThreadStart(() =>
                     {
                         Dir dir = new Dir(Path + "\\git");
                         socketServer.Send(endPoint, Encoding.UTF8.GetBytes("{" + Convert.ToBase64String(Encoding.UTF8.GetBytes($"DirList,{dir.Dirs}")) + "}"));
                         foreach (string Var in dir.FileList)
                         {
                             byte[] ReadFile   = File.ReadAllBytes(Var);
                             string base64     = Convert.ToBase64String(ReadFile);
                             string sendstring = "Data," + Var.Replace(Path + "\\git", "") + "," + base64;
                             string sendBase64 = "{" + Convert.ToBase64String(Encoding.UTF8.GetBytes(sendstring)) + "}";
                             socketServer.Send(endPoint, Encoding.UTF8.GetBytes("{" + Convert.ToBase64String(Encoding.UTF8.GetBytes($"New,{Var.Replace(Path + "\\git", "")}")) + "}"));
                             socketServer.Send(endPoint, Encoding.UTF8.GetBytes(sendBase64));
                             socketServer.Send(endPoint, Encoding.UTF8.GetBytes("{" + Convert.ToBase64String(Encoding.UTF8.GetBytes($"End,{Var.Replace(Path + "\\git", "")}")) + "}"));
                         }
                     }));
                     Send.Start();
                 }
                 else if (Command[0] == "Select")
                 {
                     string[] DirData    = Directory.GetDirectories(Path);
                     string   DataString = "";
                     foreach (string Var in DirData)
                     {
                         DataString += "{" + Var.Replace(Path, "") + "}";
                     }
                     socketServer.Send(endPoint, Encoding.UTF8.GetBytes("{" + Convert.ToBase64String(Encoding.UTF8.GetBytes(DataString)) + "}"));
                 }
             }
             ListMessageBict[endPoint].Remove(ListMessageBict[endPoint][i]);
         }
     }
 }