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); } }
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); }
private void OnConnectionChangedHandler(object sender, EventArgs e) { if (Client != null && !Client.IsConnected) { Client = null; } }
/// <summary> /// Ferme toutes les connexions /// </summary> public override void Close() { LOGGER.Debug("Fermeture des connexions dev"); Client?.Close(); Client = null; _server?.Stop(); _server = null; }
private static async void OnSetLogConfig(IDevSocket pSocket, IDevMessage pMessage) { if (pMessage is IDevRequest request) { await pSocket.RespondAt(request); _targetOuput.Socket = pSocket; CreateRandomLogs().RunSafe(); } }
private static void IdentificationRequestHandler(IDevSocket pSocket, IDevMessage pMessage) { if (pMessage is IDevRequest request) { pSocket.RespondAt(request, new DevIdentificationResponse { AppName = AppDomain.CurrentDomain.FriendlyName }); } }
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); } }
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); }
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); } }
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; } } }
public DevTransaction(IDevSocket pSocket, IDevMessage pRequest) { _socket = pSocket; _request = pRequest; _response = new TaskCompletionSource <IDevMessage>(); }
public void HandleMessage(IDevSocket pSocket, IDevMessage pMessage) { Fct?.Invoke(pSocket, pMessage); }