private void CloseButton_Click(object sender, RoutedEventArgs e) { lock (locker) { Listener?.Stop(); Listener = null; makeConnectionThread?.Abort(); makeConnectionThread = null; foreach (FileServerHandler handler in ListHolder.FileServers) { handler.Stop(); } foreach (ClientHandler handler in ListHolder.Clients) { handler.Stop(); } ListHolder.FileServers.Clear(); ListHolder.Clients.Clear(); ListHolder.UpdateList(); MessageBox.Show("Your server has closed.", "Main server: Server closed"); } }
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(); } }
private void WorkingWithClient(TcpClient client) { try { client.ReceiveTimeout = 7000; client.SendTimeout = 7000; while (true) { string request = myStream.ReadString(); lock (locker) { switch (request) { case "<getAllFileInfo>": myStream.Write(ListHolder.FileServers.Count); myStream.GetNEXT(); foreach (FileServerHandler fileServer in ListHolder.FileServers) { List <MyFile> files = fileServer.Files; myStream.Write(files.Count); myStream.GetNEXT(); foreach (MyFile file in files) { myStream.Write(file.Name); myStream.GetNEXT(); myStream.Write(file.Size); myStream.GetNEXT(); myStream.Write(file.Address); myStream.GetNEXT(); myStream.Write(file.Port); myStream.GetNEXT(); } } break; default: throw new Exception("Receive strange request from client: \"" + request + "\""); } } } } catch (TimeoutException) { ListHolder.Clients.Remove(this); ListHolder.UpdateList(); } catch (Exception e) { MyDispatcher.Dispatcher.Invoke(() => { MessageBox.Show(e.Message, "Main server error: when working with client"); }); ListHolder.Clients.Remove(this); ListHolder.UpdateList(); } }