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

OpCustomAsync() public method

public OpCustomAsync ( byte customOpCode, object>.Dictionary customOpParameters, bool sendReliable, byte channelId, bool encrypt = false ) : IObservable
customOpCode byte
customOpParameters object>.Dictionary
sendReliable bool
channelId byte
encrypt bool
return IObservable
        public virtual IObservable<OperationResponse> OpCustomAsync(byte customOpCode, Dictionary<byte, object> customOpParameters, bool sendReliable, byte channelId = 0, bool encrypt = false)
        {
            ValidateDisposed();

            var msgId = Interlocked.Increment(ref messageId);
            var future = Listener.IssueOperationResponseFuture(msgId);

            customOpParameters[ReservedMessageIdKey] = msgId;
            opCustomPublisher.OnNext(customOpParameters);

            var beforeStatusCode = Listener.LastStatusCode;
            if (!base.OpCustom(customOpCode, customOpParameters, sendReliable, channelId, encrypt))
            {
                AsyncSubject<OperationResponse> _future;
                Listener.TryGetAndRemoveFuture(msgId, out _future);
                future.OnError(new Exception(string.Format("Can't send message. BeforeStatusCode:{0} AfterStatusCode:{1}", beforeStatusCode, Listener.LastStatusCode)));
                return future.AsObservable();
            }

            return future.Timeout(Timeout).Do(_ => { }, ex =>
            {
                if (ex is TimeoutException)
                {
                    AsyncSubject<OperationResponse> removeTarget;
                    Listener.TryGetAndRemoveFuture(msgId, out removeTarget);
                }
            });
        }