//--------------------------------------------------------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(); }
//--------------------------------------------------------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(); } } } }
//--------------------------------------------------------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(); } } } }