-
Notifications
You must be signed in to change notification settings - Fork 126
/
Copy pathReceiveReconnectingState.cs
113 lines (107 loc) · 3.8 KB
/
ReceiveReconnectingState.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using PubnubApi.PubnubEventEngine.Core;
using PubnubApi.PubnubEventEngine.Subscribe.Invocations;
namespace PubnubApi.PubnubEventEngine.Subscribe.States {
internal class ReceiveReconnectingState : Core.IState {
public IEnumerable<string> Channels;
public IEnumerable<string> ChannelGroups;
public SubscriptionCursor Cursor;
public IEnumerable<IEffectInvocation> OnEntry { get; }
public IEnumerable<IEffectInvocation> OnExit { get; }
public Tuple<Core.IState, IEnumerable<IEffectInvocation>> Transition(IEvent e) {
switch (e) {
case Events.SubscriptionChangedEvent subscriptionChanged:
return new Tuple<Core.IState, IEnumerable<IEffectInvocation>>(
new ReceivingState() {
Channels = subscriptionChanged.Channels,
ChannelGroups = subscriptionChanged.ChannelGroups,
Cursor = subscriptionChanged.Cursor
},
new[] {
new ReceiveMessagesInvocation() {
Channels = subscriptionChanged.Channels,
ChannelGroups = subscriptionChanged.ChannelGroups,
Cursor = subscriptionChanged.Cursor
},
}
);
case Events.DisconnectEvent disconnect:
return new Tuple<Core.IState, IEnumerable<IEffectInvocation>>(
new ReceiveStoppedState() {
Channels = disconnect.Channels,
ChannelGroups = disconnect.ChannelGroups,
Cursor = disconnect.Cursor
},
new[] {
new EmitStatusInvocation() {
Channels = disconnect.Channels,
ChannelGroups = disconnect.ChannelGroups,
},
}
);
case Events.SubscriptionRestoredEvent subscriptionRestored:
return new Tuple<IState, IEnumerable<IEffectInvocation>>(
new ReceivingState() {
Channels = subscriptionRestored.Channels,
ChannelGroups = subscriptionRestored.ChannelGroups,
Cursor = subscriptionRestored.Cursor
},
new[] {
new ReceiveMessagesInvocation() {
Channels = subscriptionRestored.Channels,
ChannelGroups = subscriptionRestored.ChannelGroups,
Cursor = subscriptionRestored.Cursor
},
}
);
case Events.ReceiveReconnectSuccessEvent receiveReconnectSuccess:
return new Tuple<IState, IEnumerable<IEffectInvocation>>(
new ReceivingState() {
Channels = receiveReconnectSuccess.Channels,
ChannelGroups = receiveReconnectSuccess.ChannelGroups,
Cursor = receiveReconnectSuccess.Cursor
},
new IEffectInvocation[] {
new EmitStatusInvocation() {
Channels = receiveReconnectSuccess.Channels,
ChannelGroups = receiveReconnectSuccess.ChannelGroups,
},
new ReceiveMessagesInvocation() {
Channels = receiveReconnectSuccess.Channels,
ChannelGroups = receiveReconnectSuccess.ChannelGroups,
Cursor = receiveReconnectSuccess.Cursor
}
}
);
case Events.ReceiveReconnectFailureEvent receiveReconnectFailure:
return new Tuple<IState, IEnumerable<IEffectInvocation>>(
new ReceiveReconnectingState() {
Channels = receiveReconnectFailure.Channels,
ChannelGroups = receiveReconnectFailure.ChannelGroups,
Cursor = receiveReconnectFailure.Cursor
},
new[]
{
new ReceiveReconnectInvocation
{
Channels = receiveReconnectFailure.Channels,
ChannelGroups = receiveReconnectFailure.ChannelGroups,
Cursor = receiveReconnectFailure.Cursor
}
}
);
case Events.ReceiveReconnectGiveUpEvent receiveReconnectGiveUp:
return new Tuple<IState, IEnumerable<IEffectInvocation>>(
new ReceiveFailedState() {
Channels = receiveReconnectGiveUp.Channels,
ChannelGroups = receiveReconnectGiveUp.ChannelGroups,
Cursor = receiveReconnectGiveUp.Cursor
},
null
);
default: return null;
}
}
}
}