Exemple #1
0
        protected void DispatchMessage(IDevSocket pSocket, IDevMessage pMessage)
        {
            if (pMessage == null)
            {
                return;
            }

            bool hasListener = false;

            GetListeners(pMessage?.GetType()).ForEach((l) =>
            {
                try
                {
                    hasListener = true;
                    l?.HandleMessage(pSocket, pMessage);
                }
                catch (Exception e)
                {
                    LOGGER.Error(e, "Une erreur s'est produit pendant la gestion des messages");
                }
            });

            if (!hasListener && pMessage is IDevRequest request)
            {
                // Message non interprété
                pSocket.RespondAt(request, null, false);
            }
        }
Exemple #2
0
        public async Task <IDevMessage> Send()
        {
            IDevMessage result = null;

            try
            {
                if (_socket.IsConnected)
                {
                    _socket.OnConnectionChanged += OnConnectionChanged;
                    _socket.OnMessageReceived   += OnMessageReceived;

                    await _socket.Send(_request);

                    result = await _response.Task;
                }
            }
            catch (TaskCanceledException)
            {
                LOGGER.Warn("Annulation de l'échange");
                _response.TrySetCanceled();
            }
            catch (Exception e)
            {
                LOGGER.Error(e);
                _response.TrySetException(e);
            }
            finally
            {
                _socket.OnConnectionChanged -= OnConnectionChanged;
                _socket.OnMessageReceived   -= OnMessageReceived;
                _socket = null;
            }
            return(result);
        }
Exemple #3
0
 private void OnConnectionChangedHandler(object sender, EventArgs e)
 {
     if (Client != null && !Client.IsConnected)
     {
         Client = null;
     }
 }
Exemple #4
0
 /// <summary>
 /// Ferme toutes les connexions
 /// </summary>
 public override void Close()
 {
     LOGGER.Debug("Fermeture des connexions dev");
     Client?.Close();
     Client = null;
     _server?.Stop();
     _server = null;
 }
Exemple #5
0
        private static async void OnSetLogConfig(IDevSocket pSocket, IDevMessage pMessage)
        {
            if (pMessage is IDevRequest request)
            {
                await pSocket.RespondAt(request);

                _targetOuput.Socket = pSocket;
                CreateRandomLogs().RunSafe();
            }
        }
Exemple #6
0
 private static void IdentificationRequestHandler(IDevSocket pSocket, IDevMessage pMessage)
 {
     if (pMessage is IDevRequest request)
     {
         pSocket.RespondAt(request, new DevIdentificationResponse
         {
             AppName = AppDomain.CurrentDomain.FriendlyName
         });
     }
 }
Exemple #7
0
 private void OnLogReceived(IDevSocket pSocket, IDevMessage pMessage)
 {
     if (pMessage is DevLogsRequest request)
     {
         LOGGER.Debug("Réception de logs");
         if (request.Logs != null)
         {
             Logs.AddRange(request.Logs);
         }
         pSocket.RespondAt(request);
     }
 }
Exemple #8
0
        public async Task <bool> Connect(Uri pRemote)
        {
            // Fermeture des précédents connexions
            Close();

            Socket = _factory.BuildSocket();
            Socket.OnConnectionChanged += OnConnectionChangedHandler;
            Socket.OnMessageReceived   += OnMessageReceivedHandler;
            var isConnected = await Socket.Connect(pRemote);

            return(Socket.IsConnected);
        }
Exemple #9
0
        public override void Close()
        {
            if (Socket != null)
            {
                Socket.OnConnectionChanged -= OnConnectionChangedHandler;
                Socket.OnMessageReceived   -= OnMessageReceivedHandler;
                Socket.Close();
                Socket = null;

                // Force le dispatch de la déconnexion
                OnConnectChanged?.Invoke(this, EventArgs.Empty);
            }
        }
Exemple #10
0
 private void RegisterSocket(TcpClient pNewSocket)
 {
     if (pNewSocket != null)
     {
         try
         {
             Client = _factory.BuildSocket();
             Client.UseConnectedSocket(pNewSocket);
         }
         catch (Exception e)
         {
             LOGGER.Error(e, "Une erreur est survenue durant la prisez en charge d'une nouvelle connexion provenant de {0}", pNewSocket?.Client?.RemoteEndPoint);
             pNewSocket.Close();
             Client = null;
         }
     }
 }
Exemple #11
0
 public DevTransaction(IDevSocket pSocket, IDevMessage pRequest)
 {
     _socket   = pSocket;
     _request  = pRequest;
     _response = new TaskCompletionSource <IDevMessage>();
 }
Exemple #12
0
 public void HandleMessage(IDevSocket pSocket, IDevMessage pMessage)
 {
     Fct?.Invoke(pSocket, pMessage);
 }