コード例 #1
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private async void MESSAGE_SENDER_NewValidMessage(IMessageSender sender, Events.NewValidMessageEventArgs args)
        {
            await METHOD_SEMA.WaitAsync();

            if (disposed || done)
            {
                METHOD_SEMA.Release();
                return;
            }

            if (args.MESSAGE is T msg)
            {
                if (matchId && !string.Equals(sendId, msg.ID))
                {
                    METHOD_SEMA.Release();
                    return;
                }

                if (IS_VALID_ANSWER(msg))
                {
                    completionSource.TrySetResult(new MessageResponseHelperResult <T>(MessageResponseHelperResultState.SUCCESS, msg));
                    done = true;
                }
            }
            METHOD_SEMA.Release();
        }
コード例 #2
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private void Client_NewValidMessage(IMessageSender sender, Events.NewValidMessageEventArgs args)
        {
            if (args.MESSAGE is T)
            {
                if (matchId && !Equals(sendId, args.MESSAGE.ID))
                {
                    return;
                }

                try
                {
                    SEMA.Wait();
                    if (ON_MESSAGE == null || ON_MESSAGE(args.MESSAGE as T))
                    {
                        stopTimer();
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (!disposed)
                    {
                        SEMA.Release();
                    }
                }
            }
        }
コード例 #3
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private void MESSAGE_SENDER_NewValidMessage(IMessageSender sender, Events.NewValidMessageEventArgs args)
        {
            if (disposed)
            {
                return;
            }

            if (args.MESSAGE is T)
            {
                if (matchId && !Equals(sendId, args.MESSAGE.ID))
                {
                    return;
                }

                try
                {
                    METHOD_SEMA.Wait();
                    if ((ON_MESSAGE is null || ON_MESSAGE(this, args.MESSAGE as T)) && !disposed)
                    {
                        // Prevent the case that a result is already available although the timer hasn't started yet:
                        TIMER_SEMA.Wait();
                        if (disposed)
                        {
                            return;
                        }
                        stopTimer();
                        TIMER_SEMA.Release();
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (!disposed)
                    {
                        METHOD_SEMA.Release();
                    }
                }
            }
        }