PhotonWire.Client.ObservablePhotonPeer.ConnectAsync C# (CSharp) Method

ConnectAsync() public method

public ConnectAsync ( string serverAddress, string applicationName ) : IObservable
serverAddress string
applicationName string
return IObservable
        public virtual IObservable<bool> ConnectAsync(string serverAddress, string applicationName)
        {
            ValidateDisposed();

            var future = new AsyncSubject<bool>();
            var watchStatusChanged = new SingleAssignmentDisposable();
            watchStatusChanged.Disposable = this.ObserveStatusChanged().Subscribe(x =>
            {
                if (x == StatusCode.ExceptionOnConnect)
                {
                    watchStatusChanged.Dispose();
                    future.OnError(new ConnectionFailedException(serverAddress, applicationName));
                }

                if (x == StatusCode.Connect)
                {
                    watchStatusChanged.Dispose();

                    future.OnNext(true);
                    future.OnCompleted();
                }
            });

            if (this.Connect(serverAddress, applicationName))
            {
                this.LastConnectServerAddress = serverAddress;
                this.LastConnectApplicationName = applicationName;

                return future.Timeout(Timeout).Catch((Exception ex) =>
                {
                    watchStatusChanged.Dispose();
                    this.Disconnect();
                    return Observable.Throw<bool>(ex);
                });
            }
            else
            {
                watchStatusChanged.Dispose();
                return Observable.Return(false);
            }
        }

Usage Example

Example #1
0
        public static void Initialize(TestContext cx)
        {
            Peer = new ObservablePhotonPeer(ExitGames.Client.Photon.ConnectionProtocol.Tcp)
            {
                Timeout = TimeSpan.FromSeconds(5)
            };
            var task = Peer.ConnectAsync("127.0.0.1:4530", "ServerApp");

            task.Wait(); // wait for timeout seconds...
        }