public static Task ConnectTaskAsync(this BandClientManager manager, BandClient client)
        {
            var tcs = new TaskCompletionSource <object> ();

            EventHandler <ClientManagerConnectedEventArgs>       onConnected  = null;
            EventHandler <ClientManagerDisconnectedEventArgs>    onDisconnect = null;
            EventHandler <ClientManagerFailedToConnectEventArgs> onFailed     = null;

            // setup the completed event
            onConnected = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we are finished
                    tcs.SetResult(null);
                }
            };
            manager.Connected += onConnected;

            // setup the canceled event
            onDisconnect = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we were canceled
                    tcs.SetCanceled();
                }
            };
            manager.Disconnected += onDisconnect;

            // setup the failed event
            onFailed = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we failed
                    tcs.SetException(new BandException(args.Error));
                }
            };
            manager.ConnectionFailed += onFailed;

            // run async
            manager.ConnectAsync(client);

            return(tcs.Task);
        }
Example #2
0
        public static Task DisconnectTaskAsync(this BandClientManager manager, BandClient client)
        {
            var tcs = new TaskCompletionSource <object> ();

            // setup the disconnected event
            EventHandler <ClientManagerDisconnectedEventArgs> onDisconnect = null;

            onDisconnect = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Disconnected -= onDisconnect;

                    // we were disconnected (success)
                    tcs.SetResult(null);
                }
            };
            manager.Disconnected += onDisconnect;

            // run async
            manager.ConnectAsync(client);

            return(tcs.Task);
        }
        public static Task ConnectTaskAsync(this BandClientManager manager, BandClient client)
        {
            // short circuit becuase if we are already connected
            // then the delegate won't get fired
            if (client.IsConnected)
            {
                return(Task.FromResult <object> (null));
            }

            var tcs = new TaskCompletionSource <object> ();

            EventHandler <ClientManagerConnectedEventArgs>       onConnected  = null;
            EventHandler <ClientManagerDisconnectedEventArgs>    onDisconnect = null;
            EventHandler <ClientManagerFailedToConnectEventArgs> onFailed     = null;

            // setup the completed event
            onConnected = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we are finished
                    tcs.SetResult(null);
                }
            };
            manager.Connected += onConnected;

            // setup the canceled event
            onDisconnect = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we were canceled
                    tcs.SetCanceled();
                }
            };
            manager.Disconnected += onDisconnect;

            // setup the failed event
            onFailed = (sender, args) => {
                if (args.Client == client)
                {
                    manager.Connected        -= onConnected;
                    manager.Disconnected     -= onDisconnect;
                    manager.ConnectionFailed -= onFailed;

                    // we failed
                    tcs.SetException(new BandException(args.Error));
                }
            };
            manager.ConnectionFailed += onFailed;

            // run async
            manager.ConnectAsync(client);

            return(tcs.Task);
        }