Exemple #1
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();
            }
        }