Skip to content

Commit 41fbe92

Browse files
committed
PresenceEventResult
1 parent 81e5f0e commit 41fbe92

File tree

2 files changed

+81
-24
lines changed

2 files changed

+81
-24
lines changed

src/Api/PubnubApi/EndPoint/PubSub/SubscribeOperation2.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public SubscribeOperation2(PNConfiguration pubnubConfig, IJsonPluggableLibrary j
7171
receivingEffectHandler.CancelReceiveRequested += ReceivingEffect_CancelReceiveRequested;
7272
receivingEffectHandler.AnnounceStatus = Announce;
7373
receivingEffectHandler.AnnounceMessage = Announce;
74+
receivingEffectHandler.AnnouncePresenceEvent = Announce;
7475

7576
var receiveReconnectEffectHandler = new ReceiveReconnectingEffectHandler<object>(eventEmitter);
7677
receiveReconnectEffectHandler.ReconnectionPolicy = config.ReconnectionPolicy;

src/Api/PubnubApi/EventEngine/ReceivingEffectHandler.cs

Lines changed: 80 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,38 @@ public class ReceiveingResponse<T>
1616

1717
public class Message<T>
1818
{
19+
[JsonProperty ("a")]
20+
public string Shard { get; set;}
21+
22+
[JsonProperty ("b")]
23+
public string SubscriptionMatch { get; set;}
24+
1925
[JsonProperty("c")]
2026
public string Channel { get; set; }
2127

2228
[JsonProperty("d")]
2329
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; }
2451
}
2552

2653
public class PresenceEvent
@@ -68,6 +95,7 @@ public class ReceivingEffectHandler<T> : IEffectInvocationHandler, IReceiveMessa
6895
public Action<string> LogCallback { get; set; }
6996
public Action<PNStatus> AnnounceStatus { get; set; }
7097
public Action<PNMessageResult<object>> AnnounceMessage { get; set; }
98+
public Action<PNPresenceEventResult> AnnouncePresenceEvent { get; set; }
7199
public PNReconnectionPolicy ReconnectionPolicy { get; set; }
72100

73101
public event EventHandler<ReceiveRequestEventArgs> ReceiveRequested;
@@ -134,14 +162,6 @@ public void OnReceivingEffectResponseReceived(string json)
134162
receiveSuccessEvent.Name = "RECEIVE_SUCCESS";
135163
LogCallback?.Invoke("OnReceivingEffectResponseReceived - EventType.ReceiveSuccess");
136164

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-
145165
emitter.emit(receiveSuccessEvent);
146166
}
147167
else
@@ -178,8 +198,6 @@ public void OnReceivingEffectResponseReceived(string json)
178198

179199
emitter.emit(receiveFailureEvent);
180200
}
181-
//emitter.emit(evnt);
182-
//emitter.emit(json, false, messageCount);
183201
}
184202

185203
public void Cancel()
@@ -199,26 +217,64 @@ public void Run(ExtendedState context)
199217
{
200218
AnnounceStatus(pnStatus);
201219
}
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++)
207225
{
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
209244
{
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)
212264
{
213-
var presenceData = JsonConvert.DeserializeObject<PresenceEvent>(receiveMessages[index].Payload.ToString());
265+
//TODO: Callback for File message
214266
}
215267
else
216268
{
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+
}
222278
}
223279
}
224280
}

0 commit comments

Comments
 (0)