private void MakeConnect(IPEndPoint serverIP) { try { Listener = new TcpListener(serverIP); Listener.Start(); while (true) { TcpClient client = Listener.AcceptTcpClient(); MyStreamIO myStream = new MyStreamIO(client.GetStream()); string firstMessage = myStream.ReadString(); myStream.SendNEXT(); if (firstMessage == "<isFileServer>") { FileServerHandler handler = new FileServerHandler(client); ListHolder.FileServers.Add(handler); handler.Start(); } else if (firstMessage == "<isClient>") { ClientHandler handler = new ClientHandler(client); ListHolder.Clients.Add(handler); handler.Start(); } ListHolder.UpdateList(); } } catch (ThreadAbortException) { } catch (Exception e) { MessageBox.Show(e.Message, "Main server error: when waiting for connection"); } }
private void WorkingWithFileServer(TcpClient client) { try { client.ReceiveTimeout = 7000; client.SendTimeout = 7000; while (true) { string request = myStream.ReadString(); myStream.SendNEXT(); lock (locker) { switch (request) { case "<sendFilesInfo>": lock (locker) { Files.Clear(); int number0fFile = myStream.ReadInt(); myStream.SendNEXT(); for (int i = 0; i < number0fFile; i++) { string fileName = myStream.ReadString(); myStream.SendNEXT(); long fileSize = myStream.ReadLong(); myStream.SendNEXT(); string fileIp = myStream.ReadString(); myStream.SendNEXT(); int filePort = myStream.ReadInt(); myStream.SendNEXT(); MyFile file = new MyFile(fileName, fileSize, fileIp, filePort); Files.Add(file); } } break; default: throw new Exception("Receive strange request from file server: \"" + request + "\""); } } } } catch (TimeoutException) { Files.Clear(); ListHolder.FileServers.Remove(this); ListHolder.UpdateList(); } catch (Exception e) { MyDispatcher.Dispatcher.Invoke(() => { MessageBox.Show(e.Message, "Main server error: when working with file server"); }); Files.Clear(); ListHolder.FileServers.Remove(this); ListHolder.UpdateList(); } }