private async void OnClientConnect(object sender, ClientConnectedEventArgs e) {
     ITcpChannel channel = e.Channel;
     FreeSwitch freeSwitch = new FreeSwitch(ref channel);
     try {
         var added = _clients.TryAdd(channel.ChannelId, freeSwitch);
         if (added) {
             await freeSwitch.Connect();
             bool ready = await freeSwitch.Resume() && await freeSwitch.MyEvents() && await freeSwitch.DivertEvents();
             if (!ready) {
                 await freeSwitch.Close();
                 return;
             }
         }
         if (ClientReady != null) ClientReady(this, new InboundClientEventArgs(freeSwitch));
     }
     catch (Exception) {
         if (channel != null) channel.Close();
     }
 }
 /// <summary>
 ///     A client has connected (nothing has been sent or received yet)
 /// </summary>
 /// <param name="channel">Channel which we created for the remote socket.</param>
 /// <returns></returns>
 protected virtual ClientConnectedEventArgs OnClientConnected(ITcpChannel channel) {
     var args = new ClientConnectedEventArgs(channel);
     ClientConnected(this, args);
     return args;
 }