コード例 #1
0
        public void TCPServerWith2Clients_Disconnect1Client_1ClientDisconnected()
        {
            //Arrange
            Client disconnectedClient = null;

            tcpserver = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpserver);

            serverObjectTransport.OnClientDisconnect(c => disconnectedClient = c);

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            tcpclient2 = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport2 = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient2);

            Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 2);

            //Act

            var FirstClient = serverObjectTransport.GetConnectedClients().First();

            serverObjectTransport.DisconnectClient(FirstClient);

            Utilities.WaitFor(ref disconnectedClient);

            //Assert
            Client LastClient = serverObjectTransport.GetConnectedClients().First();

            Assert.AreEqual(1, serverObjectTransport.GetConnectedClients().Count());
            Assert.AreNotEqual(FirstClient.Port, LastClient.Port);
        }
コード例 #2
0
        public void TCPClient_ClientDisconnectsServer_ServerOnClientDisconnectCalled()
        {
            //Arrange
            Client disconnectedClient = null;
            Client connectedServer    = null;

            tcpserver = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpserver);

            serverObjectTransport.OnClientDisconnect(c => disconnectedClient = c);

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            clientObjectTransport.OnClientConnect(c => connectedServer = c);

            tcpclient2 = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport2 = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient2);

            Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 2);

            //Act

            //disconnect the server from the client
            clientObjectTransport.DisconnectClient();

            Utilities.WaitFor(ref disconnectedClient);

            //Assert
            //Ensure that the client record was disconnect from the server
            Assert.AreEqual(1, serverObjectTransport.GetConnectedClients().Count());

            //Esnure that the client who disconnected from the server was the one that we called disconect
            Assert.AreEqual(disconnectedClient.Port, tcpclient.LocalPort);
        }
コード例 #3
0
        public void TCPServerWith2Clients_Disconnect2Client_AllClientsDisconnected()
        {
            //Arrange
            List <Client> disconnectedClients = new List <Client>();

            tcpserver = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpserver);

            serverObjectTransport.OnClientDisconnect(c => disconnectedClients.Add(c));

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            tcpclient2 = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport2 = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient2);

            Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 2);

            //Act

            var allClients = serverObjectTransport.GetConnectedClients().ToArray();

            serverObjectTransport.DisconnectClient(allClients);

            Utilities.WaitFor(() => disconnectedClients.Count == 2);

            //Assert
            Assert.AreEqual(0, serverObjectTransport.GetConnectedClients().Count());
            Assert.AreEqual(2, disconnectedClients.Count());
        }
コード例 #4
0
        public void TCPClient_SendUnreliably_ExceptionThrown()
        {
            //Arrange
            Client client           = null;
            Client clientDisconnect = null;

            server = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(server);

            tcpclient = new TCPClientChannel("127.0.0.1", server.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            clientObjectTransport.OnClientDisconnect(c => clientDisconnect = c);
            client = clientObjectTransport.GetConnectedClients().First();

            Utilities.WaitFor(ref client);
            Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 1);

            var message = new MockObjectMessage();

            //Act

            clientObjectTransport.Send(message)
            .Unreliable()
            .Execute();
        }
コード例 #5
0
        public void TCPServer_ClientDisconnects_CallbackCalled()
        {
            //Arrange
            Client clientConnect    = null;
            Client clientDisconnect = null;

            tcpserver = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpserver);

            serverObjectTransport.OnClientConnect(c => clientConnect       = c);
            serverObjectTransport.OnClientDisconnect(c => clientDisconnect = c);

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            Utilities.WaitFor(ref clientConnect);
            Utilities.WaitFor(() => clientObjectTransport.GetConnectedClients().Count() == 1);
            //Act

            clientObjectTransport.Stop();

            Utilities.WaitFor(ref clientDisconnect);
            Utilities.Wait();
            //Assert
            Assert.AreEqual(clientConnect.IPAddress, "127.0.0.1");
            Assert.AreEqual(clientDisconnect.IPAddress, "127.0.0.1");
            Assert.AreEqual(clientDisconnect, clientConnect);
            Assert.AreEqual(0, clientObjectTransport.GetConnectedClients().Count());
            Assert.AreEqual(0, serverObjectTransport.GetConnectedClients().Count());
        }
コード例 #6
0
 /// <summary>
 /// Prevents a default instance of the <see cref="GUIClient"/> class from being created.
 /// </summary>
 private GUIClient()
 {
     clientChannel = new TCPClientChannel();
     clientChannel.OnMessageFromServer    += ReceiveMessageFromServer;
     clientChannel.DisconnectedFromServer += OnDisconnectFromServer;
     isConnected = clientChannel.ConnectToServer(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000));
     CheckConnection?.Invoke(this, isConnected);
 }
コード例 #7
0
        /// <summary>
        /// Remove handler from observable collection.
        /// </summary>
        /// <param name="handler">Handler to remove.</param>
        public void RemoveHandler(string handler)
        {
            string[] args = { handler };
            //Create command for closing handler.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.CloseHandler, args, "");

            //Send command.
            TCPClientChannel.GetTCPClientChannel().Send(command);
            //Remove handler from list.
            Handlers.Remove(handler);
        }
コード例 #8
0
        public void TCPServer_WhenClientConnects_CallbackFunctionCalled()
        {
            bool connected = false;

            tcpserver = new TCPServerChannel("127.0.0.1", 0);
            tcpserver.OnClientConnect(c => connected = true);

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);

            Utilities.WaitFor(ref connected);
            Assert.IsTrue(connected);
        }
コード例 #9
0
        public static Tuple <ObjectTransport, ObjectTransport> GetConnectObjectTransports()
        {
            server = new TCPServerChannel("127.0.0.1", 0);

            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(server);

            tcpclient = new TCPClientChannel("127.0.0.1", server.LocalPort);
            ObjectTransport client = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            Tuple <ObjectTransport, ObjectTransport> result = new Tuple <ObjectTransport, ObjectTransport>(serverObjectTransport, client);

            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public SettingsModel()
        {
            //Create command.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.GetConfigCommand, null, "");

            //Add function to event.
            TCPClientChannel.GetTCPClientChannel().NotifyMessage += UpdateByNotification;
            //Send command.
            string settingsMsg = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);

            //Update notification.
            UpdateByNotification(settingsMsg);
        }
コード例 #11
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public MainWindowViewModel()
 {
     //Create main window model.
     this.MainWindowModel = new MainWindowModel();
     //Check if there is connection.
     if (VMIsConnected == IsConnectedEnum.Connected)
     {
         //Create constructor for models.
         this.SettingViewModel = new SettingViewModel();
         this.LogViewModel     = new LogViewModel();
         //Listen to server.
         TCPClientChannel.GetTCPClientChannel().ListenToServer();
     }
 }
コード例 #12
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public LogModel()
        {
            LogMessages = new ObservableCollection <MessageRecievedEventArgs>();
            // Set new command for creating log.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.LogCommand, null, "");

            // Adding notify function.
            TCPClientChannel.GetTCPClientChannel().NotifyMessage += UpdateByNotification;
            // Send command and recevie back log history.
            string settingsMsg = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);

            // Add log history to log.
            UpdateByNotification(settingsMsg);
        }
コード例 #13
0
        /// <summary>
        /// constructor.
        /// </summary>
        public ImageServiceDetails()
        {
            string message;
            ConfigurationRecieveEventArgs returnParam;

            UpdateStudentList();

            //Create command to get echo from server.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.EchoCommand, null, "");

            try
            {
                TCPClientChannel.GetTCPClientChannel().DisconnectClientChannel();
                //Send echo command.
                message = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
                //Deserialize return object.
                returnParam = JsonConvert.DeserializeObject <ConfigurationRecieveEventArgs>(message);
                //Check if we get ack.
                if ((ConfigurationEnum)returnParam.ConfigurationID == ConfigurationEnum.Ack)
                {
                    ImageServiceStatus = "ON";
                }
            }
            catch (Exception e)
            {
                //If there was exception - it means that there is no connection.
                ImageServiceStatus = "OFF";
            }

            try
            {
                command = new CommandRecievedEventArgs((int)CommandEnum.GetConfigCommand, null, "");
                //Send GetConfig command.
                message = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
                //Deserialize return object.
                returnParam   = JsonConvert.DeserializeObject <ConfigurationRecieveEventArgs>(message);
                OutputDirPath = returnParam.Args[0];
                //Create list of extention
                m_filesExtention = new List <string>
                {
                    ".jpg", ".png", ".gif", ".bmp"
                };

                UpdateNumberOfPictures();
            }
            catch (Exception)
            {
                NumberOfPictures = 0;
            }
        }
コード例 #14
0
 /// <summary>
 /// constructor.
 /// </summary>
 public LogInfoModel()
 {
     LogMessages = new List <Log>();
     try
     {
         // Set new command for creating log.
         CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.LogCommand, null, "");
         // Send command and recevie back log history.
         TCPClientChannel.GetTCPClientChannel().DisconnectClientChannel();
         string settingsMsg = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
         // Add log history to log.
         UpdateByNotification(settingsMsg);
         //TCPClientChannel.GetTCPClientChannel().ListenToServer();
     }
     catch (Exception)
     {
     }
 }
コード例 #15
0
        public void TCPServer_SendObject_CorrectObjectSent()
        {
            //Arrange
            MockObjectMessage receivedObject = null;

            tcpserver = new TCPServerChannel("127.0.0.1", 0);

            Client client = null;

            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpserver);

            serverObjectTransport.OnClientConnect(c => client = c);

            tcpclient = new TCPClientChannel("127.0.0.1", tcpserver.LocalPort);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            Utilities.WaitFor(ref client);

            //Act

            clientObjectTransport.Receive <MockObjectMessage>(o =>
                                                              receivedObject = o
                                                              ).Execute();

            serverObjectTransport.Send(new MockObjectMessage()
            {
                Property1_string  = "hello world!",
                Property2_int     = 123,
                Property3_decimal = 12.3M
            })
            .To(client)
            .Execute();

            Utilities.WaitFor(ref receivedObject);
            //Assert
            Assert.AreEqual("hello world!", receivedObject.Property1_string);
            Assert.AreEqual(123, receivedObject.Property2_int);
            Assert.AreEqual(12.3M, receivedObject.Property3_decimal);
        }
コード例 #16
0
        public void TCPNetwork_SendAndReplyMessage_ResponseIsCalled()
        {
            //Arrange
            Client client           = null;
            Client clientDisconnect = null;

            server = new TCPServerChannel("127.0.0.1", 0);
            ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(server);

            tcpclient = new TCPClientChannel("127.0.0.1", server.Port);
            ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient);

            clientObjectTransport.OnClientDisconnect(c => clientDisconnect = c);
            client = clientObjectTransport.GetConnectedClients().First();

            Utilities.WaitFor(ref client);
            Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 1);

            //Act
            serverObjectTransport.Receive <MockObjectMessage>()
            .Reply((o) => { return(o); })
            .Execute();


            var mockObject = new MockObjectMessage()
            {
                Property1_string = "Mock Object"
            };
            MockObjectMessage responseObject = null;

            clientObjectTransport.Send(mockObject)
            .Response <MockObjectMessage>((r) => { responseObject = r; })
            .Execute();

            Utilities.WaitFor(ref responseObject);

            //Assert
            Assert.AreEqual(responseObject.Property1_string, "Mock Object");
        }
コード例 #17
0
        /// <summary>
        /// Remove handler from observable collection.
        /// </summary>
        /// <param name="handler">Handler to remove.</param>
        public HandlerRemoval RemoveHandler(string handler)
        {
            string[] args = { handler };
            //Create command for closing handler.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.CloseHandler, args, "");
            //Send command.
            string returnMessage = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);

            if (UpdateByNotification(returnMessage))
            {
                Thread.Sleep(200);
                if (Handlers.Contains(handler))
                {
                    return(HandlerRemoval.FailedToRemove);
                }
                else
                {
                    return(HandlerRemoval.Removed);
                }
            }
            return(HandlerRemoval.FailedToRemove);
        }
コード例 #18
0
        /// <summary>
        /// constructor.
        /// </summary>
        public ConfigModel()
        {
            //Create command.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.GetConfigCommand, null, "");

            try
            {
                //Add function to event.
                //TCPClientChannel.GetTCPClientChannel().NotifyMessage += UpdateByNotification;
                TCPClientChannel.GetTCPClientChannel().DisconnectClientChannel();
                //Send command.
                string settingsMsg = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
                //Update notification.
                UpdateByNotification(settingsMsg);
                //TCPClientChannel.GetTCPClientChannel().ListenToServer();
            }
            catch (Exception)
            {
                string[] emptyArgs = { " ", " ", " ", " " };
                SetSettings(emptyArgs);
            }
        }
コード例 #19
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public MainWindowModel()
        {
            //Create command to get echo from server.
            CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.EchoCommand, null, "");

            try
            {
                //Send echo command.
                string message = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
                //Deserialize return object.
                ConfigurationRecieveEventArgs returnParam =
                    JsonConvert.DeserializeObject <ConfigurationRecieveEventArgs>(message);
                //Check if we get ack.
                if ((ConfigurationEnum)returnParam.ConfigurationID == ConfigurationEnum.Ack)
                {
                    IsConnected = IsConnectedEnum.Connected;
                }
            }
            catch (Exception)
            {
                //If there was exception - it means that there is no connection.
                IsConnected = IsConnectedEnum.NotConnected;
            }
        }
コード例 #20
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public PhotosModel()
        {
            string message;
            ConfigurationRecieveEventArgs returnParam;

            PhotosList = new List <Photo>();

            try
            {
                //Initialize command.
                CommandRecievedEventArgs command = new CommandRecievedEventArgs((int)CommandEnum.GetConfigCommand, null, "");
                //Send GetConfig command.
                message = TCPClientChannel.GetTCPClientChannel().SendAndReceive(command);
                //Deserialize return object.
                returnParam = JsonConvert.DeserializeObject <ConfigurationRecieveEventArgs>(message);
                //Get outputdir.
                OutputDirPath = returnParam.Args[0];
                //Update photos list.
                UpdatePhotosList();
            }
            catch (Exception)
            {
            }
        }
コード例 #21
0
ファイル: WebClient.cs プロジェクト: LioraZ/Image-Service
 private WebClient()
 {
     client = new TCPClientChannel();
     client.OnMessageFromServer += Client_OnMessageFromServer;
     Connect();
 }