@@ -16,11 +16,38 @@ public class ReceiveingResponse<T>
16
16
17
17
public class Message < T >
18
18
{
19
+ [ JsonProperty ( "a" ) ]
20
+ public string Shard { get ; set ; }
21
+
22
+ [ JsonProperty ( "b" ) ]
23
+ public string SubscriptionMatch { get ; set ; }
24
+
19
25
[ JsonProperty ( "c" ) ]
20
26
public string Channel { get ; set ; }
21
27
22
28
[ JsonProperty ( "d" ) ]
23
29
public T Payload { get ; set ; }
30
+
31
+ [ JsonProperty ( "e" ) ]
32
+ public int MessageType { get ; set ; }
33
+
34
+ [ JsonProperty ( "f" ) ]
35
+ public string Flags { get ; set ; }
36
+
37
+ //[JsonProperty("i")]
38
+ //public string IssuingClientId { get; set; }
39
+
40
+ [ JsonProperty ( "k" ) ]
41
+ public string SubscribeKey { get ; set ; }
42
+
43
+ [ JsonProperty ( "o" ) ]
44
+ public object OriginatingTimetoken { get ; set ; }
45
+
46
+ [ JsonProperty ( "p" ) ]
47
+ public object PublishMetadata { get ; set ; }
48
+
49
+ [ JsonProperty ( "s" ) ]
50
+ public long SequenceNumber { get ; set ; }
24
51
}
25
52
26
53
public class PresenceEvent
@@ -68,6 +95,7 @@ public class ReceivingEffectHandler<T> : IEffectInvocationHandler, IReceiveMessa
68
95
public Action < string > LogCallback { get ; set ; }
69
96
public Action < PNStatus > AnnounceStatus { get ; set ; }
70
97
public Action < PNMessageResult < object > > AnnounceMessage { get ; set ; }
98
+ public Action < PNPresenceEventResult > AnnouncePresenceEvent { get ; set ; }
71
99
public PNReconnectionPolicy ReconnectionPolicy { get ; set ; }
72
100
73
101
public event EventHandler < ReceiveRequestEventArgs > ReceiveRequested ;
@@ -134,14 +162,6 @@ public void OnReceivingEffectResponseReceived(string json)
134
162
receiveSuccessEvent . Name = "RECEIVE_SUCCESS" ;
135
163
LogCallback ? . Invoke ( "OnReceivingEffectResponseReceived - EventType.ReceiveSuccess" ) ;
136
164
137
- //pnStatus = new PNStatus();
138
- //pnStatus.StatusCode = 200;
139
- //pnStatus.Operation = PNOperationType.PNSubscribeOperation;
140
- //pnStatus.AffectedChannels = extendedState.Channels;
141
- //pnStatus.AffectedChannelGroups = extendedState.ChannelGroups;
142
- //pnStatus.Category = PNStatusCategory.PNConnectedCategory;
143
- //pnStatus.Error = false;
144
-
145
165
emitter . emit ( receiveSuccessEvent ) ;
146
166
}
147
167
else
@@ -178,8 +198,6 @@ public void OnReceivingEffectResponseReceived(string json)
178
198
179
199
emitter . emit ( receiveFailureEvent ) ;
180
200
}
181
- //emitter.emit(evnt);
182
- //emitter.emit(json, false, messageCount);
183
201
}
184
202
185
203
public void Cancel ( )
@@ -199,26 +217,64 @@ public void Run(ExtendedState context)
199
217
{
200
218
AnnounceStatus ( pnStatus ) ;
201
219
}
202
- if ( AnnounceMessage != null )
203
- {
204
- Message < object > [ ] receiveMessages = GetMessages ( ) ;
205
- int messageCount = receiveMessages . Length ;
206
- if ( receiveMessages != null && receiveMessages . Length > 0 )
220
+ Message < object > [ ] receiveMessages = GetMessages ( ) ;
221
+ int messageCount = ( receiveMessages != null ) ? receiveMessages . Length : 0 ;
222
+ if ( messageCount > 0 )
223
+ {
224
+ for ( int index = 0 ; index < receiveMessages . Length ; index ++ )
207
225
{
208
- for ( int index = 0 ; index < receiveMessages . Length ; index ++ )
226
+ LogCallback ? . Invoke ( $ "Received Message ({ index + 1 } of { receiveMessages . Length } ) : { JsonConvert . SerializeObject ( receiveMessages [ index ] ) } ") ;
227
+ if ( receiveMessages [ index ] . Channel . IndexOf ( "-pnpres" ) > 0 )
228
+ {
229
+ if ( AnnouncePresenceEvent != null )
230
+ {
231
+ var presenceEvent = JsonConvert . DeserializeObject < PresenceEvent > ( receiveMessages [ index ] . Payload . ToString ( ) ) ;
232
+ PNPresenceEventResult presenceEventResult = new PNPresenceEventResult ( ) ;
233
+ presenceEventResult . Channel = receiveMessages [ index ] . Channel ;
234
+ presenceEventResult . Event = presenceEvent . Action ;
235
+ presenceEventResult . Occupancy = presenceEvent . Occupancy ;
236
+ presenceEventResult . Uuid = presenceEvent . Uuid ;
237
+ presenceEventResult . Timestamp = presenceEvent . Timestamp ;
238
+ presenceEventResult . UserMetadata = receiveMessages [ index ] . PublishMetadata ;
239
+
240
+ AnnouncePresenceEvent ? . Invoke ( presenceEventResult ) ;
241
+ }
242
+ }
243
+ else
209
244
{
210
- LogCallback ? . Invoke ( $ "Received Message ({ index + 1 } of { receiveMessages . Length } ) : { JsonConvert . SerializeObject ( receiveMessages [ index ] ) } ") ;
211
- if ( receiveMessages [ index ] . Channel . IndexOf ( "-pnpres" ) > 0 )
245
+ if ( receiveMessages [ index ] . MessageType == 1 )
246
+ {
247
+ //TODO: Callback for Signal message
248
+ PNSignalResult < object > signalMessage = new PNSignalResult < object >
249
+ {
250
+ Channel = receiveMessages [ index ] . Channel ,
251
+ Message = receiveMessages [ index ] . Payload ,
252
+ } ;
253
+ AnnounceMessage ? . Invoke ( signalMessage ) ;
254
+ }
255
+ else if ( receiveMessages [ index ] . MessageType == 2 )
256
+ {
257
+ //TODO: Callback for Object message
258
+ }
259
+ else if ( receiveMessages [ index ] . MessageType == 3 )
260
+ {
261
+ //TODO: Callback for Message Action message
262
+ }
263
+ else if ( receiveMessages [ index ] . MessageType == 4 )
212
264
{
213
- var presenceData = JsonConvert . DeserializeObject < PresenceEvent > ( receiveMessages [ index ] . Payload . ToString ( ) ) ;
265
+ //TODO: Callback for File message
214
266
}
215
267
else
216
268
{
217
- LogCallback ? . Invoke ( $ "Message : { JsonConvert . SerializeObject ( receiveMessages [ index ] . Payload ) } ") ;
218
- PNMessageResult < object > messageResult = new PNMessageResult < object > ( ) ;
219
- messageResult . Channel = receiveMessages [ index ] . Channel ;
220
- messageResult . Message = receiveMessages [ index ] . Payload ;
221
- AnnounceMessage ? . Invoke ( messageResult ) ;
269
+ //Callback for regular message
270
+ if ( AnnounceMessage != null )
271
+ {
272
+ LogCallback ? . Invoke ( $ "Message : { JsonConvert . SerializeObject ( receiveMessages [ index ] . Payload ) } ") ;
273
+ PNMessageResult < object > messageResult = new PNMessageResult < object > ( ) ;
274
+ messageResult . Channel = receiveMessages [ index ] . Channel ;
275
+ messageResult . Message = receiveMessages [ index ] . Payload ;
276
+ AnnounceMessage ? . Invoke ( messageResult ) ;
277
+ }
222
278
}
223
279
}
224
280
}
0 commit comments