com.wallstop-studios.dxmessaging 2.0.0-rc08 → 2.0.0-rc09
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Runtime/Core/MessageBus/MessageBus.cs +731 -260
- package/package.json +1 -1
|
@@ -394,12 +394,12 @@
|
|
|
394
394
|
bool complete = false;
|
|
395
395
|
if (removed)
|
|
396
396
|
{
|
|
397
|
-
if (
|
|
397
|
+
if (
|
|
398
|
+
_interceptsByType.TryGetValue(type, out prioritizedInterceptors)
|
|
399
|
+
&& prioritizedInterceptors.TryGetValue(priority, out interceptors)
|
|
400
|
+
)
|
|
398
401
|
{
|
|
399
|
-
|
|
400
|
-
{
|
|
401
|
-
complete = interceptors.Remove(interceptor);
|
|
402
|
-
}
|
|
402
|
+
complete = interceptors.Remove(interceptor);
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
if (!complete)
|
|
@@ -467,38 +467,29 @@
|
|
|
467
467
|
)
|
|
468
468
|
{
|
|
469
469
|
foundAnyHandlers = true;
|
|
470
|
-
|
|
471
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
472
|
-
try
|
|
470
|
+
if (sortedHandlers.Count == 1)
|
|
473
471
|
{
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
)
|
|
472
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
473
|
+
sortedHandlers.First();
|
|
474
|
+
RunUntargetedPostProcessing(ref typedMessage, entry.Key, entry.Value);
|
|
475
|
+
}
|
|
476
|
+
else
|
|
477
|
+
{
|
|
478
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
479
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
480
|
+
try
|
|
477
481
|
{
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
);
|
|
482
|
-
try
|
|
483
|
-
{
|
|
484
|
-
foreach (MessageHandler handler in messageHandlers)
|
|
485
|
-
{
|
|
486
|
-
handler.HandleUntargetedPostProcessing(
|
|
487
|
-
ref typedMessage,
|
|
488
|
-
this,
|
|
489
|
-
priority
|
|
490
|
-
);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
finally
|
|
482
|
+
foreach (
|
|
483
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
484
|
+
)
|
|
494
485
|
{
|
|
495
|
-
|
|
486
|
+
RunUntargetedPostProcessing(ref typedMessage, entry.Key, entry.Value);
|
|
496
487
|
}
|
|
497
488
|
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
489
|
+
finally
|
|
490
|
+
{
|
|
491
|
+
_sortedHandlers.Push(handlerList);
|
|
492
|
+
}
|
|
502
493
|
}
|
|
503
494
|
}
|
|
504
495
|
|
|
@@ -512,6 +503,51 @@
|
|
|
512
503
|
}
|
|
513
504
|
}
|
|
514
505
|
|
|
506
|
+
private void RunUntargetedPostProcessing<TMessage>(
|
|
507
|
+
ref TMessage typedMessage,
|
|
508
|
+
int priority,
|
|
509
|
+
Dictionary<MessageHandler, int> handlers
|
|
510
|
+
)
|
|
511
|
+
where TMessage : IUntargetedMessage
|
|
512
|
+
{
|
|
513
|
+
switch (handlers.Count)
|
|
514
|
+
{
|
|
515
|
+
case <= 0:
|
|
516
|
+
{
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
case 1:
|
|
520
|
+
{
|
|
521
|
+
MessageHandler handler = handlers.Keys.First();
|
|
522
|
+
handler.HandleUntargetedPostProcessing(ref typedMessage, this, priority);
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
default:
|
|
526
|
+
{
|
|
527
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
528
|
+
handlers.Keys
|
|
529
|
+
);
|
|
530
|
+
try
|
|
531
|
+
{
|
|
532
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
533
|
+
{
|
|
534
|
+
handler.HandleUntargetedPostProcessing(
|
|
535
|
+
ref typedMessage,
|
|
536
|
+
this,
|
|
537
|
+
priority
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
finally
|
|
542
|
+
{
|
|
543
|
+
_messageHandlers.Push(messageHandlers);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
515
551
|
public void UntypedTargetedBroadcast(InstanceId target, ITargetedMessage typedMessage)
|
|
516
552
|
{
|
|
517
553
|
Type messageType = typedMessage.MessageType;
|
|
@@ -572,39 +608,34 @@
|
|
|
572
608
|
)
|
|
573
609
|
{
|
|
574
610
|
foundAnyHandlers = true;
|
|
575
|
-
|
|
576
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
577
|
-
try
|
|
611
|
+
if (sortedHandlers.Count == 1)
|
|
578
612
|
{
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
)
|
|
613
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
614
|
+
sortedHandlers.First();
|
|
615
|
+
RunTargetedBroadcast(ref target, ref typedMessage, entry.Key, entry.Value);
|
|
616
|
+
}
|
|
617
|
+
else
|
|
618
|
+
{
|
|
619
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
620
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
621
|
+
try
|
|
582
622
|
{
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
);
|
|
587
|
-
try
|
|
588
|
-
{
|
|
589
|
-
foreach (MessageHandler handler in messageHandlers)
|
|
590
|
-
{
|
|
591
|
-
handler.HandleTargeted(
|
|
592
|
-
ref target,
|
|
593
|
-
ref typedMessage,
|
|
594
|
-
this,
|
|
595
|
-
priority
|
|
596
|
-
);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
finally
|
|
623
|
+
foreach (
|
|
624
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
625
|
+
)
|
|
600
626
|
{
|
|
601
|
-
|
|
627
|
+
RunTargetedBroadcast(
|
|
628
|
+
ref target,
|
|
629
|
+
ref typedMessage,
|
|
630
|
+
entry.Key,
|
|
631
|
+
entry.Value
|
|
632
|
+
);
|
|
602
633
|
}
|
|
603
634
|
}
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
635
|
+
finally
|
|
636
|
+
{
|
|
637
|
+
_sortedHandlers.Push(handlerList);
|
|
638
|
+
}
|
|
608
639
|
}
|
|
609
640
|
}
|
|
610
641
|
|
|
@@ -617,39 +648,34 @@
|
|
|
617
648
|
)
|
|
618
649
|
{
|
|
619
650
|
foundAnyHandlers = true;
|
|
620
|
-
|
|
621
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
622
|
-
try
|
|
651
|
+
if (sortedHandlers.Count == 1)
|
|
623
652
|
{
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
)
|
|
653
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
654
|
+
sortedHandlers.First();
|
|
655
|
+
RunTargetedPostProcessing(ref target, ref typedMessage, entry.Key, entry.Value);
|
|
656
|
+
}
|
|
657
|
+
else
|
|
658
|
+
{
|
|
659
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
660
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
661
|
+
try
|
|
627
662
|
{
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
);
|
|
632
|
-
try
|
|
663
|
+
foreach (
|
|
664
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
665
|
+
)
|
|
633
666
|
{
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
priority
|
|
641
|
-
);
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
finally
|
|
645
|
-
{
|
|
646
|
-
_messageHandlers.Push(messageHandlers);
|
|
667
|
+
RunTargetedPostProcessing(
|
|
668
|
+
ref target,
|
|
669
|
+
ref typedMessage,
|
|
670
|
+
entry.Key,
|
|
671
|
+
entry.Value
|
|
672
|
+
);
|
|
647
673
|
}
|
|
648
674
|
}
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
675
|
+
finally
|
|
676
|
+
{
|
|
677
|
+
_sortedHandlers.Push(handlerList);
|
|
678
|
+
}
|
|
653
679
|
}
|
|
654
680
|
}
|
|
655
681
|
|
|
@@ -658,39 +684,39 @@
|
|
|
658
684
|
&& 0 < sortedHandlers.Count
|
|
659
685
|
)
|
|
660
686
|
{
|
|
661
|
-
|
|
662
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
663
|
-
try
|
|
687
|
+
if (sortedHandlers.Count == 1)
|
|
664
688
|
{
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
689
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
690
|
+
sortedHandlers.First();
|
|
691
|
+
RunTargetedWithoutTargetingPostProcessing(
|
|
692
|
+
ref target,
|
|
693
|
+
ref typedMessage,
|
|
694
|
+
entry.Key,
|
|
695
|
+
entry.Value
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
else
|
|
699
|
+
{
|
|
700
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
701
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
702
|
+
try
|
|
668
703
|
{
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
);
|
|
673
|
-
try
|
|
704
|
+
foreach (
|
|
705
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
706
|
+
)
|
|
674
707
|
{
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
priority
|
|
682
|
-
);
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
finally
|
|
686
|
-
{
|
|
687
|
-
_messageHandlers.Push(messageHandlers);
|
|
708
|
+
RunTargetedWithoutTargetingPostProcessing(
|
|
709
|
+
ref target,
|
|
710
|
+
ref typedMessage,
|
|
711
|
+
entry.Key,
|
|
712
|
+
entry.Value
|
|
713
|
+
);
|
|
688
714
|
}
|
|
689
715
|
}
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
716
|
+
finally
|
|
717
|
+
{
|
|
718
|
+
_sortedHandlers.Push(handlerList);
|
|
719
|
+
}
|
|
694
720
|
}
|
|
695
721
|
}
|
|
696
722
|
|
|
@@ -705,6 +731,152 @@
|
|
|
705
731
|
}
|
|
706
732
|
}
|
|
707
733
|
|
|
734
|
+
private void RunTargetedWithoutTargetingPostProcessing<TMessage>(
|
|
735
|
+
ref InstanceId target,
|
|
736
|
+
ref TMessage typedMessage,
|
|
737
|
+
int priority,
|
|
738
|
+
Dictionary<MessageHandler, int> handlers
|
|
739
|
+
)
|
|
740
|
+
where TMessage : ITargetedMessage
|
|
741
|
+
{
|
|
742
|
+
switch (handlers.Count)
|
|
743
|
+
{
|
|
744
|
+
case <= 0:
|
|
745
|
+
{
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
case 1:
|
|
749
|
+
{
|
|
750
|
+
MessageHandler handler = handlers.Keys.First();
|
|
751
|
+
handler.HandleTargetedWithoutTargetingPostProcessing(
|
|
752
|
+
ref target,
|
|
753
|
+
ref typedMessage,
|
|
754
|
+
this,
|
|
755
|
+
priority
|
|
756
|
+
);
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
default:
|
|
760
|
+
{
|
|
761
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
762
|
+
handlers.Keys
|
|
763
|
+
);
|
|
764
|
+
try
|
|
765
|
+
{
|
|
766
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
767
|
+
{
|
|
768
|
+
handler.HandleTargetedWithoutTargetingPostProcessing(
|
|
769
|
+
ref target,
|
|
770
|
+
ref typedMessage,
|
|
771
|
+
this,
|
|
772
|
+
priority
|
|
773
|
+
);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
finally
|
|
777
|
+
{
|
|
778
|
+
_messageHandlers.Push(messageHandlers);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
break;
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
private void RunTargetedPostProcessing<TMessage>(
|
|
787
|
+
ref InstanceId target,
|
|
788
|
+
ref TMessage typedMessage,
|
|
789
|
+
int priority,
|
|
790
|
+
Dictionary<MessageHandler, int> handlers
|
|
791
|
+
)
|
|
792
|
+
where TMessage : ITargetedMessage
|
|
793
|
+
{
|
|
794
|
+
switch (handlers.Count)
|
|
795
|
+
{
|
|
796
|
+
case <= 0:
|
|
797
|
+
{
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
case 1:
|
|
801
|
+
{
|
|
802
|
+
MessageHandler handler = handlers.Keys.First();
|
|
803
|
+
handler.HandleTargetedPostProcessing(
|
|
804
|
+
ref target,
|
|
805
|
+
ref typedMessage,
|
|
806
|
+
this,
|
|
807
|
+
priority
|
|
808
|
+
);
|
|
809
|
+
return;
|
|
810
|
+
}
|
|
811
|
+
default:
|
|
812
|
+
{
|
|
813
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
814
|
+
handlers.Keys
|
|
815
|
+
);
|
|
816
|
+
try
|
|
817
|
+
{
|
|
818
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
819
|
+
{
|
|
820
|
+
handler.HandleTargetedPostProcessing(
|
|
821
|
+
ref target,
|
|
822
|
+
ref typedMessage,
|
|
823
|
+
this,
|
|
824
|
+
priority
|
|
825
|
+
);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
finally
|
|
829
|
+
{
|
|
830
|
+
_messageHandlers.Push(messageHandlers);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
break;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
private void RunTargetedBroadcast<TMessage>(
|
|
839
|
+
ref InstanceId target,
|
|
840
|
+
ref TMessage typedMessage,
|
|
841
|
+
int priority,
|
|
842
|
+
Dictionary<MessageHandler, int> handlers
|
|
843
|
+
)
|
|
844
|
+
where TMessage : ITargetedMessage
|
|
845
|
+
{
|
|
846
|
+
switch (handlers.Count)
|
|
847
|
+
{
|
|
848
|
+
case <= 0:
|
|
849
|
+
{
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
852
|
+
case 1:
|
|
853
|
+
{
|
|
854
|
+
MessageHandler handler = handlers.Keys.First();
|
|
855
|
+
handler.HandleTargeted(ref target, ref typedMessage, this, priority);
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
default:
|
|
859
|
+
{
|
|
860
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
861
|
+
handlers.Keys
|
|
862
|
+
);
|
|
863
|
+
try
|
|
864
|
+
{
|
|
865
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
866
|
+
{
|
|
867
|
+
handler.HandleTargeted(ref target, ref typedMessage, this, priority);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
finally
|
|
871
|
+
{
|
|
872
|
+
_messageHandlers.Push(messageHandlers);
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
break;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
|
|
708
880
|
public void UntypedSourcedBroadcast(InstanceId source, IBroadcastMessage typedMessage)
|
|
709
881
|
{
|
|
710
882
|
Type messageType = typedMessage.MessageType;
|
|
@@ -768,39 +940,29 @@
|
|
|
768
940
|
)
|
|
769
941
|
{
|
|
770
942
|
foundAnyHandlers = true;
|
|
771
|
-
|
|
772
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
773
|
-
try
|
|
943
|
+
if (sortedHandlers.Count == 1)
|
|
774
944
|
{
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
)
|
|
945
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
946
|
+
sortedHandlers.First();
|
|
947
|
+
RunBroadcast(ref source, ref typedMessage, entry.Key, entry.Value);
|
|
948
|
+
}
|
|
949
|
+
else
|
|
950
|
+
{
|
|
951
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
952
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
953
|
+
try
|
|
778
954
|
{
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
);
|
|
783
|
-
try
|
|
955
|
+
foreach (
|
|
956
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
957
|
+
)
|
|
784
958
|
{
|
|
785
|
-
|
|
786
|
-
{
|
|
787
|
-
handler.HandleSourcedBroadcast(
|
|
788
|
-
ref source,
|
|
789
|
-
ref typedMessage,
|
|
790
|
-
this,
|
|
791
|
-
priority
|
|
792
|
-
);
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
finally
|
|
796
|
-
{
|
|
797
|
-
_messageHandlers.Push(messageHandlers);
|
|
959
|
+
RunBroadcast(ref source, ref typedMessage, entry.Key, entry.Value);
|
|
798
960
|
}
|
|
799
961
|
}
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
962
|
+
finally
|
|
963
|
+
{
|
|
964
|
+
_sortedHandlers.Push(handlerList);
|
|
965
|
+
}
|
|
804
966
|
}
|
|
805
967
|
}
|
|
806
968
|
|
|
@@ -813,39 +975,39 @@
|
|
|
813
975
|
)
|
|
814
976
|
{
|
|
815
977
|
foundAnyHandlers = true;
|
|
816
|
-
|
|
817
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
818
|
-
try
|
|
978
|
+
if (sortedHandlers.Count == 1)
|
|
819
979
|
{
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
980
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
981
|
+
sortedHandlers.First();
|
|
982
|
+
RunBroadcastPostProcessing(
|
|
983
|
+
ref source,
|
|
984
|
+
ref typedMessage,
|
|
985
|
+
entry.Key,
|
|
986
|
+
entry.Value
|
|
987
|
+
);
|
|
988
|
+
}
|
|
989
|
+
else
|
|
990
|
+
{
|
|
991
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
992
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
993
|
+
try
|
|
823
994
|
{
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
);
|
|
828
|
-
try
|
|
829
|
-
{
|
|
830
|
-
foreach (MessageHandler handler in messageHandlers)
|
|
831
|
-
{
|
|
832
|
-
handler.HandleSourcedBroadcastPostProcessing(
|
|
833
|
-
ref source,
|
|
834
|
-
ref typedMessage,
|
|
835
|
-
this,
|
|
836
|
-
priority
|
|
837
|
-
);
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
finally
|
|
995
|
+
foreach (
|
|
996
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
997
|
+
)
|
|
841
998
|
{
|
|
842
|
-
|
|
999
|
+
RunBroadcastPostProcessing(
|
|
1000
|
+
ref source,
|
|
1001
|
+
ref typedMessage,
|
|
1002
|
+
entry.Key,
|
|
1003
|
+
entry.Value
|
|
1004
|
+
);
|
|
843
1005
|
}
|
|
844
1006
|
}
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
1007
|
+
finally
|
|
1008
|
+
{
|
|
1009
|
+
_sortedHandlers.Push(handlerList);
|
|
1010
|
+
}
|
|
849
1011
|
}
|
|
850
1012
|
}
|
|
851
1013
|
|
|
@@ -854,39 +1016,39 @@
|
|
|
854
1016
|
&& 0 < sortedHandlers.Count
|
|
855
1017
|
)
|
|
856
1018
|
{
|
|
857
|
-
|
|
858
|
-
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
859
|
-
try
|
|
1019
|
+
if (sortedHandlers.Count == 1)
|
|
860
1020
|
{
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1021
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry =
|
|
1022
|
+
sortedHandlers.First();
|
|
1023
|
+
RunBroadcastWithoutSourcePostProcessing(
|
|
1024
|
+
ref source,
|
|
1025
|
+
ref typedMessage,
|
|
1026
|
+
entry.Key,
|
|
1027
|
+
entry.Value
|
|
1028
|
+
);
|
|
1029
|
+
}
|
|
1030
|
+
else
|
|
1031
|
+
{
|
|
1032
|
+
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
1033
|
+
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
1034
|
+
try
|
|
864
1035
|
{
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
);
|
|
869
|
-
try
|
|
870
|
-
{
|
|
871
|
-
foreach (MessageHandler handler in messageHandlers)
|
|
872
|
-
{
|
|
873
|
-
handler.HandleSourcedBroadcastWithoutSourcePostProcessing(
|
|
874
|
-
ref source,
|
|
875
|
-
ref typedMessage,
|
|
876
|
-
this,
|
|
877
|
-
priority
|
|
878
|
-
);
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
finally
|
|
1036
|
+
foreach (
|
|
1037
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList
|
|
1038
|
+
)
|
|
882
1039
|
{
|
|
883
|
-
|
|
1040
|
+
RunBroadcastWithoutSourcePostProcessing(
|
|
1041
|
+
ref source,
|
|
1042
|
+
ref typedMessage,
|
|
1043
|
+
entry.Key,
|
|
1044
|
+
entry.Value
|
|
1045
|
+
);
|
|
884
1046
|
}
|
|
885
1047
|
}
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
1048
|
+
finally
|
|
1049
|
+
{
|
|
1050
|
+
_sortedHandlers.Push(handlerList);
|
|
1051
|
+
}
|
|
890
1052
|
}
|
|
891
1053
|
}
|
|
892
1054
|
|
|
@@ -901,45 +1063,226 @@
|
|
|
901
1063
|
}
|
|
902
1064
|
}
|
|
903
1065
|
|
|
904
|
-
private void
|
|
1066
|
+
private void RunBroadcastWithoutSourcePostProcessing<TMessage>(
|
|
1067
|
+
ref InstanceId source,
|
|
1068
|
+
ref TMessage typedMessage,
|
|
1069
|
+
int priority,
|
|
1070
|
+
Dictionary<MessageHandler, int> handlers
|
|
1071
|
+
)
|
|
1072
|
+
where TMessage : IBroadcastMessage
|
|
905
1073
|
{
|
|
906
|
-
|
|
1074
|
+
switch (handlers.Count)
|
|
907
1075
|
{
|
|
908
|
-
|
|
1076
|
+
case <= 0:
|
|
1077
|
+
{
|
|
1078
|
+
return;
|
|
1079
|
+
}
|
|
1080
|
+
case 1:
|
|
1081
|
+
{
|
|
1082
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1083
|
+
handler.HandleSourcedBroadcastWithoutSourcePostProcessing(
|
|
1084
|
+
ref source,
|
|
1085
|
+
ref typedMessage,
|
|
1086
|
+
this,
|
|
1087
|
+
priority
|
|
1088
|
+
);
|
|
1089
|
+
return;
|
|
1090
|
+
}
|
|
1091
|
+
default:
|
|
1092
|
+
{
|
|
1093
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1094
|
+
handlers.Keys
|
|
1095
|
+
);
|
|
1096
|
+
try
|
|
1097
|
+
{
|
|
1098
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1099
|
+
{
|
|
1100
|
+
handler.HandleSourcedBroadcastWithoutSourcePostProcessing(
|
|
1101
|
+
ref source,
|
|
1102
|
+
ref typedMessage,
|
|
1103
|
+
this,
|
|
1104
|
+
priority
|
|
1105
|
+
);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
finally
|
|
1109
|
+
{
|
|
1110
|
+
_messageHandlers.Push(messageHandlers);
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
break;
|
|
1114
|
+
}
|
|
909
1115
|
}
|
|
1116
|
+
}
|
|
910
1117
|
|
|
911
|
-
|
|
912
|
-
|
|
1118
|
+
private void RunBroadcastPostProcessing<TMessage>(
|
|
1119
|
+
ref InstanceId source,
|
|
1120
|
+
ref TMessage typedMessage,
|
|
1121
|
+
int priority,
|
|
1122
|
+
Dictionary<MessageHandler, int> handlers
|
|
1123
|
+
)
|
|
1124
|
+
where TMessage : IBroadcastMessage
|
|
1125
|
+
{
|
|
1126
|
+
switch (handlers.Count)
|
|
913
1127
|
{
|
|
914
|
-
|
|
1128
|
+
case <= 0:
|
|
915
1129
|
{
|
|
916
|
-
|
|
1130
|
+
return;
|
|
1131
|
+
}
|
|
1132
|
+
case 1:
|
|
1133
|
+
{
|
|
1134
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1135
|
+
handler.HandleSourcedBroadcastPostProcessing(
|
|
1136
|
+
ref source,
|
|
1137
|
+
ref typedMessage,
|
|
1138
|
+
this,
|
|
1139
|
+
priority
|
|
1140
|
+
);
|
|
1141
|
+
return;
|
|
1142
|
+
}
|
|
1143
|
+
default:
|
|
1144
|
+
{
|
|
1145
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1146
|
+
handlers.Keys
|
|
1147
|
+
);
|
|
1148
|
+
try
|
|
1149
|
+
{
|
|
1150
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1151
|
+
{
|
|
1152
|
+
handler.HandleSourcedBroadcastPostProcessing(
|
|
1153
|
+
ref source,
|
|
1154
|
+
ref typedMessage,
|
|
1155
|
+
this,
|
|
1156
|
+
priority
|
|
1157
|
+
);
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
finally
|
|
1161
|
+
{
|
|
1162
|
+
_messageHandlers.Push(messageHandlers);
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
break;
|
|
917
1166
|
}
|
|
918
1167
|
}
|
|
919
|
-
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
private void RunBroadcast<TMessage>(
|
|
1171
|
+
ref InstanceId source,
|
|
1172
|
+
ref TMessage typedMessage,
|
|
1173
|
+
int priority,
|
|
1174
|
+
Dictionary<MessageHandler, int> handlers
|
|
1175
|
+
)
|
|
1176
|
+
where TMessage : IBroadcastMessage
|
|
1177
|
+
{
|
|
1178
|
+
switch (handlers.Count)
|
|
920
1179
|
{
|
|
921
|
-
|
|
1180
|
+
case <= 0:
|
|
1181
|
+
{
|
|
1182
|
+
return;
|
|
1183
|
+
}
|
|
1184
|
+
case 1:
|
|
1185
|
+
{
|
|
1186
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1187
|
+
handler.HandleSourcedBroadcast(ref source, ref typedMessage, this, priority);
|
|
1188
|
+
return;
|
|
1189
|
+
}
|
|
1190
|
+
default:
|
|
1191
|
+
{
|
|
1192
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1193
|
+
handlers.Keys
|
|
1194
|
+
);
|
|
1195
|
+
try
|
|
1196
|
+
{
|
|
1197
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1198
|
+
{
|
|
1199
|
+
handler.HandleSourcedBroadcast(
|
|
1200
|
+
ref source,
|
|
1201
|
+
ref typedMessage,
|
|
1202
|
+
this,
|
|
1203
|
+
priority
|
|
1204
|
+
);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
finally
|
|
1208
|
+
{
|
|
1209
|
+
_messageHandlers.Push(messageHandlers);
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
break;
|
|
1213
|
+
}
|
|
922
1214
|
}
|
|
923
1215
|
}
|
|
924
1216
|
|
|
925
|
-
private void
|
|
1217
|
+
private void BroadcastGlobalUntargeted(ref IUntargetedMessage message)
|
|
926
1218
|
{
|
|
927
|
-
|
|
1219
|
+
switch (_globalSinks.Count)
|
|
928
1220
|
{
|
|
929
|
-
|
|
1221
|
+
case <= 0:
|
|
1222
|
+
{
|
|
1223
|
+
return;
|
|
1224
|
+
}
|
|
1225
|
+
case 1:
|
|
1226
|
+
{
|
|
1227
|
+
MessageHandler handler = _globalSinks.Keys.First();
|
|
1228
|
+
handler.HandleGlobalUntargetedMessage(ref message, this);
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
default:
|
|
1232
|
+
{
|
|
1233
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1234
|
+
_globalSinks.Keys
|
|
1235
|
+
);
|
|
1236
|
+
try
|
|
1237
|
+
{
|
|
1238
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1239
|
+
{
|
|
1240
|
+
handler.HandleGlobalUntargetedMessage(ref message, this);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
finally
|
|
1244
|
+
{
|
|
1245
|
+
_messageHandlers.Push(messageHandlers);
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
break;
|
|
1249
|
+
}
|
|
930
1250
|
}
|
|
1251
|
+
}
|
|
931
1252
|
|
|
932
|
-
|
|
933
|
-
|
|
1253
|
+
private void BroadcastGlobalTargeted(ref InstanceId target, ref ITargetedMessage message)
|
|
1254
|
+
{
|
|
1255
|
+
switch (_globalSinks.Count)
|
|
934
1256
|
{
|
|
935
|
-
|
|
1257
|
+
case <= 0:
|
|
1258
|
+
{
|
|
1259
|
+
return;
|
|
1260
|
+
}
|
|
1261
|
+
case 1:
|
|
936
1262
|
{
|
|
1263
|
+
MessageHandler handler = _globalSinks.Keys.First();
|
|
937
1264
|
handler.HandleGlobalTargetedMessage(ref target, ref message, this);
|
|
1265
|
+
return;
|
|
1266
|
+
}
|
|
1267
|
+
default:
|
|
1268
|
+
{
|
|
1269
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1270
|
+
_globalSinks.Keys
|
|
1271
|
+
);
|
|
1272
|
+
try
|
|
1273
|
+
{
|
|
1274
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1275
|
+
{
|
|
1276
|
+
handler.HandleGlobalTargetedMessage(ref target, ref message, this);
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
finally
|
|
1280
|
+
{
|
|
1281
|
+
_messageHandlers.Push(messageHandlers);
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
break;
|
|
938
1285
|
}
|
|
939
|
-
}
|
|
940
|
-
finally
|
|
941
|
-
{
|
|
942
|
-
_messageHandlers.Push(messageHandlers);
|
|
943
1286
|
}
|
|
944
1287
|
}
|
|
945
1288
|
|
|
@@ -948,22 +1291,41 @@
|
|
|
948
1291
|
ref IBroadcastMessage message
|
|
949
1292
|
)
|
|
950
1293
|
{
|
|
951
|
-
|
|
1294
|
+
switch (_globalSinks.Count)
|
|
952
1295
|
{
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
{
|
|
959
|
-
foreach (MessageHandler handler in messageHandlers)
|
|
1296
|
+
case <= 0:
|
|
1297
|
+
{
|
|
1298
|
+
return;
|
|
1299
|
+
}
|
|
1300
|
+
case 1:
|
|
960
1301
|
{
|
|
1302
|
+
MessageHandler handler = _globalSinks.Keys.First();
|
|
961
1303
|
handler.HandleGlobalSourcedBroadcastMessage(ref source, ref message, this);
|
|
1304
|
+
return;
|
|
1305
|
+
}
|
|
1306
|
+
default:
|
|
1307
|
+
{
|
|
1308
|
+
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1309
|
+
_globalSinks.Keys
|
|
1310
|
+
);
|
|
1311
|
+
try
|
|
1312
|
+
{
|
|
1313
|
+
foreach (MessageHandler handler in messageHandlers)
|
|
1314
|
+
{
|
|
1315
|
+
handler.HandleGlobalSourcedBroadcastMessage(
|
|
1316
|
+
ref source,
|
|
1317
|
+
ref message,
|
|
1318
|
+
this
|
|
1319
|
+
);
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
finally
|
|
1323
|
+
{
|
|
1324
|
+
_messageHandlers.Push(messageHandlers);
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
break;
|
|
962
1328
|
}
|
|
963
|
-
}
|
|
964
|
-
finally
|
|
965
|
-
{
|
|
966
|
-
_messageHandlers.Push(messageHandlers);
|
|
967
1329
|
}
|
|
968
1330
|
}
|
|
969
1331
|
|
|
@@ -1150,15 +1512,53 @@
|
|
|
1150
1512
|
return false;
|
|
1151
1513
|
}
|
|
1152
1514
|
|
|
1515
|
+
if (sortedHandlers.Count == 1)
|
|
1516
|
+
{
|
|
1517
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry = sortedHandlers.First();
|
|
1518
|
+
RunUntargetedBroadcast(ref message, entry.Key, entry.Value);
|
|
1519
|
+
return true;
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1153
1522
|
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
1154
1523
|
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
1155
1524
|
try
|
|
1156
1525
|
{
|
|
1157
|
-
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>>
|
|
1526
|
+
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList)
|
|
1527
|
+
{
|
|
1528
|
+
RunUntargetedBroadcast(ref message, entry.Key, entry.Value);
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
finally
|
|
1532
|
+
{
|
|
1533
|
+
_sortedHandlers.Push(handlerList);
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
return true;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
private void RunUntargetedBroadcast<TMessage>(
|
|
1540
|
+
ref TMessage message,
|
|
1541
|
+
int priority,
|
|
1542
|
+
Dictionary<MessageHandler, int> handlers
|
|
1543
|
+
)
|
|
1544
|
+
where TMessage : IMessage
|
|
1545
|
+
{
|
|
1546
|
+
switch (handlers.Count)
|
|
1547
|
+
{
|
|
1548
|
+
case <= 0:
|
|
1549
|
+
{
|
|
1550
|
+
return;
|
|
1551
|
+
}
|
|
1552
|
+
case 1:
|
|
1553
|
+
{
|
|
1554
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1555
|
+
handler.HandleUntargetedMessage(ref message, this, priority);
|
|
1556
|
+
return;
|
|
1557
|
+
}
|
|
1558
|
+
default:
|
|
1158
1559
|
{
|
|
1159
|
-
int priority = handlers.Key;
|
|
1160
1560
|
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1161
|
-
handlers.
|
|
1561
|
+
handlers.Keys
|
|
1162
1562
|
);
|
|
1163
1563
|
try
|
|
1164
1564
|
{
|
|
@@ -1171,14 +1571,10 @@
|
|
|
1171
1571
|
{
|
|
1172
1572
|
_messageHandlers.Push(messageHandlers);
|
|
1173
1573
|
}
|
|
1574
|
+
|
|
1575
|
+
break;
|
|
1174
1576
|
}
|
|
1175
1577
|
}
|
|
1176
|
-
finally
|
|
1177
|
-
{
|
|
1178
|
-
_sortedHandlers.Push(handlerList);
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
return true;
|
|
1182
1578
|
}
|
|
1183
1579
|
|
|
1184
1580
|
private bool InternalTargetedWithoutTargetingBroadcast<TMessage>(
|
|
@@ -1199,15 +1595,54 @@
|
|
|
1199
1595
|
return false;
|
|
1200
1596
|
}
|
|
1201
1597
|
|
|
1598
|
+
if (sortedHandlers.Count == 1)
|
|
1599
|
+
{
|
|
1600
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry = sortedHandlers.First();
|
|
1601
|
+
RunTargetedWithoutTargeting(ref target, ref message, entry.Key, entry.Value);
|
|
1602
|
+
return true;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1202
1605
|
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
1203
1606
|
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
1204
1607
|
try
|
|
1205
1608
|
{
|
|
1206
|
-
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>>
|
|
1609
|
+
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList)
|
|
1610
|
+
{
|
|
1611
|
+
RunTargetedWithoutTargeting(ref target, ref message, entry.Key, entry.Value);
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
finally
|
|
1615
|
+
{
|
|
1616
|
+
_sortedHandlers.Push(handlerList);
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
return true;
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
private void RunTargetedWithoutTargeting<TMessage>(
|
|
1623
|
+
ref InstanceId target,
|
|
1624
|
+
ref TMessage message,
|
|
1625
|
+
int priority,
|
|
1626
|
+
Dictionary<MessageHandler, int> handlers
|
|
1627
|
+
)
|
|
1628
|
+
where TMessage : ITargetedMessage
|
|
1629
|
+
{
|
|
1630
|
+
switch (handlers.Count)
|
|
1631
|
+
{
|
|
1632
|
+
case <= 0:
|
|
1633
|
+
{
|
|
1634
|
+
return;
|
|
1635
|
+
}
|
|
1636
|
+
case 1:
|
|
1637
|
+
{
|
|
1638
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1639
|
+
handler.HandleTargetedWithoutTargeting(ref target, ref message, this, priority);
|
|
1640
|
+
return;
|
|
1641
|
+
}
|
|
1642
|
+
default:
|
|
1207
1643
|
{
|
|
1208
|
-
int priority = handlers.Key;
|
|
1209
1644
|
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1210
|
-
handlers.
|
|
1645
|
+
handlers.Keys
|
|
1211
1646
|
);
|
|
1212
1647
|
try
|
|
1213
1648
|
{
|
|
@@ -1225,18 +1660,14 @@
|
|
|
1225
1660
|
{
|
|
1226
1661
|
_messageHandlers.Push(messageHandlers);
|
|
1227
1662
|
}
|
|
1663
|
+
|
|
1664
|
+
break;
|
|
1228
1665
|
}
|
|
1229
1666
|
}
|
|
1230
|
-
finally
|
|
1231
|
-
{
|
|
1232
|
-
_sortedHandlers.Push(handlerList);
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
return true;
|
|
1236
1667
|
}
|
|
1237
1668
|
|
|
1238
1669
|
private bool InternalBroadcastWithoutSource<TMessage>(
|
|
1239
|
-
ref InstanceId
|
|
1670
|
+
ref InstanceId source,
|
|
1240
1671
|
ref TMessage message,
|
|
1241
1672
|
Type type
|
|
1242
1673
|
)
|
|
@@ -1253,22 +1684,66 @@
|
|
|
1253
1684
|
return false;
|
|
1254
1685
|
}
|
|
1255
1686
|
|
|
1687
|
+
if (sortedHandlers.Count == 1)
|
|
1688
|
+
{
|
|
1689
|
+
KeyValuePair<int, Dictionary<MessageHandler, int>> entry = sortedHandlers.First();
|
|
1690
|
+
RunBroadcastWithoutSource(ref source, ref message, entry.Key, entry.Value);
|
|
1691
|
+
return true;
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1256
1694
|
List<KeyValuePair<int, Dictionary<MessageHandler, int>>> handlerList =
|
|
1257
1695
|
GetOrAddMessageHandlerStack(sortedHandlers);
|
|
1258
1696
|
try
|
|
1259
1697
|
{
|
|
1260
|
-
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>>
|
|
1698
|
+
foreach (KeyValuePair<int, Dictionary<MessageHandler, int>> entry in handlerList)
|
|
1699
|
+
{
|
|
1700
|
+
RunBroadcastWithoutSource(ref source, ref message, entry.Key, entry.Value);
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
finally
|
|
1704
|
+
{
|
|
1705
|
+
_sortedHandlers.Push(handlerList);
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
return true;
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
private void RunBroadcastWithoutSource<TMessage>(
|
|
1712
|
+
ref InstanceId source,
|
|
1713
|
+
ref TMessage message,
|
|
1714
|
+
int priority,
|
|
1715
|
+
Dictionary<MessageHandler, int> handlers
|
|
1716
|
+
)
|
|
1717
|
+
where TMessage : IBroadcastMessage
|
|
1718
|
+
{
|
|
1719
|
+
switch (handlers.Count)
|
|
1720
|
+
{
|
|
1721
|
+
case <= 0:
|
|
1722
|
+
{
|
|
1723
|
+
return;
|
|
1724
|
+
}
|
|
1725
|
+
case 1:
|
|
1726
|
+
{
|
|
1727
|
+
MessageHandler handler = handlers.Keys.First();
|
|
1728
|
+
handler.HandleSourcedBroadcastWithoutSource(
|
|
1729
|
+
ref source,
|
|
1730
|
+
ref message,
|
|
1731
|
+
this,
|
|
1732
|
+
priority
|
|
1733
|
+
);
|
|
1734
|
+
return;
|
|
1735
|
+
}
|
|
1736
|
+
default:
|
|
1261
1737
|
{
|
|
1262
|
-
int priority = handlers.Key;
|
|
1263
1738
|
List<MessageHandler> messageHandlers = GetOrAddMessageHandlerStack(
|
|
1264
|
-
handlers.
|
|
1739
|
+
handlers.Keys
|
|
1265
1740
|
);
|
|
1266
1741
|
try
|
|
1267
1742
|
{
|
|
1268
1743
|
foreach (MessageHandler handler in messageHandlers)
|
|
1269
1744
|
{
|
|
1270
1745
|
handler.HandleSourcedBroadcastWithoutSource(
|
|
1271
|
-
ref
|
|
1746
|
+
ref source,
|
|
1272
1747
|
ref message,
|
|
1273
1748
|
this,
|
|
1274
1749
|
priority
|
|
@@ -1279,14 +1754,10 @@
|
|
|
1279
1754
|
{
|
|
1280
1755
|
_messageHandlers.Push(messageHandlers);
|
|
1281
1756
|
}
|
|
1757
|
+
|
|
1758
|
+
break;
|
|
1282
1759
|
}
|
|
1283
1760
|
}
|
|
1284
|
-
finally
|
|
1285
|
-
{
|
|
1286
|
-
_sortedHandlers.Push(handlerList);
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1289
|
-
return true;
|
|
1290
1761
|
}
|
|
1291
1762
|
|
|
1292
1763
|
private Action InternalRegisterUntargeted<T>(
|