Exemplo n.º 1
0
 public void Dispose()
 {
     if (!Disposed)
     {
         QueuedEvent.New(ClientEvent.Dispose);
     }
 }
Exemplo n.º 2
0
        protected virtual void Run()
        {
            Task.Run(async() =>
            {
                try
                {
                    QueuedEvent.OnNew = (e) =>
                    {
                        OnClientEvent?.Invoke(e);
                    };
                    var inFault = false;
                    var running = true;
                    RunOpen();
                    while (running)
                    {
                        if (await QueuedEvent.Next() is var nextEvent && nextEvent.Ok)
                        {
                            switch (nextEvent.Value)
                            {
                            case ClientEvent.Dispose:
                                RunClose();
                                running = false;
                                break;

                            case ClientEvent.Opening:
                                break;

                            case ClientEvent.Opened:
                                IsConnected = true;
                                break;

                            case ClientEvent.Restart:
                            case ClientEvent.Faulted:
                                if (!inFault)
                                {
                                    inFault = true;
                                    Client.Abort();
                                    RunClose();
                                    await Task.Delay(WaitOnFault.Milliseconds);
                                    RunOpen();
                                    inFault = false;
                                }
                                break;

                            case ClientEvent.Closing:
                                break;

                            case ClientEvent.Closed:
                                break;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    ex.LogException();
                    QueuedEvent.New(ClientEvent.Exception);
                }
                finally
                {
                    RunClose();
                    Disposed          = true;
                    QueuedEvent.OnNew = null;
                }
            });
        }
Exemplo n.º 3
0
 private void Client_Faulted(object sender, EventArgs e)
 => QueuedEvent.New(ClientEvent.Faulted);
Exemplo n.º 4
0
 private void Client_Closed(object sender, EventArgs e)
 => QueuedEvent.New(ClientEvent.Closed);
Exemplo n.º 5
0
 private void Client_Opened(object sender, EventArgs e)
 => QueuedEvent.New(ClientEvent.Opened);