Ejemplo n.º 1
0
        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");
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }