Skip to content

Commit bc3341e

Browse files
Implement MembershipData method arguments and overloads
1 parent 78876ed commit bc3341e

File tree

6 files changed

+211
-55
lines changed

6 files changed

+211
-55
lines changed

c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,24 @@ public async Task TestUpdateMemberships()
5656
return;
5757
}
5858

59+
var updateData = new ChatMembershipData()
60+
{
61+
CustomDataJson = "{\"key\":\"" + Guid.NewGuid() + "\"}"
62+
};
63+
5964
var manualUpdatedEvent = new ManualResetEvent(false);
6065
testMembership.OnMembershipUpdated += membership =>
6166
{
6267
Assert.True(membership.Id == testMembership.Id);
68+
var updatedData = membership.MembershipData.CustomDataJson;
69+
Assert.True(updatedData == updateData.CustomDataJson, $"{updatedData} != {updateData.CustomDataJson}");
6370
manualUpdatedEvent.Set();
6471
};
6572
testMembership.SetListeningForUpdates(true);
6673

6774
await Task.Delay(4000);
6875

69-
await testMembership.Update("{\"key\": \"" + Guid.NewGuid() + "\"}");
76+
await testMembership.Update(updateData);
7077
var updated = manualUpdatedEvent.WaitOne(8000);
7178
Assert.IsTrue(updated);
7279
}

c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Channel.cs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ private static extern int pn_channel_get_users_restrictions(IntPtr channel, stri
152152

153153
[DllImport("pubnub-chat")]
154154
private static extern IntPtr pn_channel_stream_message_reports(IntPtr channel);
155-
155+
156156
[DllImport("pubnub-chat")]
157157
private static extern IntPtr pn_channel_stream_updates(IntPtr channel);
158158

@@ -162,6 +162,14 @@ private static extern int pn_channel_get_users_restrictions(IntPtr channel, stri
162162
[DllImport("pubnub-chat")]
163163
private static extern IntPtr pn_channel_stream_presence(IntPtr channel);
164164

165+
[DllImport("pubnub-chat")]
166+
private static extern IntPtr pn_channel_join_with_membership_data(
167+
IntPtr channel,
168+
string membership_custom_json,
169+
string membership_type,
170+
string membership_status
171+
);
172+
165173
#endregion
166174

167175
/// <summary>
@@ -367,7 +375,7 @@ public async void SetListeningForReportEvents(bool listen)
367375
reportEventsListeningHandle = await SetListening(reportEventsListeningHandle, listen,
368376
() => pn_channel_stream_message_reports(pointer));
369377
}
370-
378+
371379
internal void BroadcastReportEvent(ChatEvent chatEvent)
372380
{
373381
OnReportEvent?.Invoke(chatEvent);
@@ -378,13 +386,13 @@ public async void SetListeningForReadReceiptsEvents(bool listen)
378386
readReceiptsListeningHandle = await SetListening(readReceiptsListeningHandle, listen,
379387
() => pn_channel_stream_read_receipts(pointer));
380388
}
381-
389+
382390
public async void SetListeningForTyping(bool listen)
383391
{
384392
typingListeningHandle = await SetListening(typingListeningHandle, listen,
385393
() => pn_channel_get_typing(pointer));
386394
}
387-
395+
388396
public async void SetListeningForPresence(bool listen)
389397
{
390398
presenceListeningHandle = await SetListening(presenceListeningHandle, listen,
@@ -437,7 +445,8 @@ internal void TryParseAndBroadcastTypingEvent(List<string> userIds)
437445
{
438446
indicator.Stop();
439447
typingIndicators.Remove(key);
440-
indicator.Dispose();;
448+
indicator.Dispose();
449+
;
441450
}
442451
}
443452

@@ -600,10 +609,10 @@ public async void Connect()
600609
{
601610
return;
602611
}
612+
603613
connectionHandle = await SetListening(connectionHandle, true, () => pn_channel_connect(pointer));
604614
}
605615

606-
// TODO: Shouldn't join have additional parameters?
607616
/// <summary>
608617
/// Joins the channel.
609618
/// <para>
@@ -626,13 +635,24 @@ public async void Connect()
626635
/// <seealso cref="OnMessageReceived"/>
627636
/// <seealso cref="Connect"/>
628637
/// <seealso cref="Disconnect"/>
629-
public async void Join()
638+
public async void Join(ChatMembershipData? membershipData = null)
630639
{
631640
if (connectionHandle != IntPtr.Zero)
632641
{
633642
return;
634643
}
635-
connectionHandle = await SetListening(connectionHandle, true, () => pn_channel_join(pointer, string.Empty));
644+
645+
if (membershipData == null)
646+
{
647+
connectionHandle =
648+
await SetListening(connectionHandle, true, () => pn_channel_join(pointer, string.Empty));
649+
}
650+
else
651+
{
652+
connectionHandle = await SetListening(connectionHandle, true,
653+
() => pn_channel_join_with_membership_data(pointer, membershipData.CustomDataJson,
654+
membershipData.Type, membershipData.Status));
655+
}
636656
}
637657

638658
/// <summary>
@@ -659,6 +679,7 @@ public void Disconnect()
659679
{
660680
return;
661681
}
682+
662683
CUtilities.CheckCFunctionResult(pn_channel_disconnect(pointer));
663684
pn_callback_handle_dispose(connectionHandle);
664685
connectionHandle = IntPtr.Zero;
@@ -690,6 +711,7 @@ public async void Leave()
690711
{
691712
return;
692713
}
714+
693715
var connectionHandleCopy = connectionHandle;
694716
connectionHandle = IntPtr.Zero;
695717
CUtilities.CheckCFunctionResult(await Task.Run(() =>
@@ -698,6 +720,7 @@ public async void Leave()
698720
{
699721
return 0;
700722
}
723+
701724
pn_channel_leave(pointer);
702725
pn_callback_handle_dispose(connectionHandleCopy);
703726
return 0;

0 commit comments

Comments
 (0)