@@ -152,7 +152,7 @@ private static extern int pn_channel_get_users_restrictions(IntPtr channel, stri
152
152
153
153
[ DllImport ( "pubnub-chat" ) ]
154
154
private static extern IntPtr pn_channel_stream_message_reports ( IntPtr channel ) ;
155
-
155
+
156
156
[ DllImport ( "pubnub-chat" ) ]
157
157
private static extern IntPtr pn_channel_stream_updates ( IntPtr channel ) ;
158
158
@@ -162,6 +162,14 @@ private static extern int pn_channel_get_users_restrictions(IntPtr channel, stri
162
162
[ DllImport ( "pubnub-chat" ) ]
163
163
private static extern IntPtr pn_channel_stream_presence ( IntPtr channel ) ;
164
164
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
+
165
173
#endregion
166
174
167
175
/// <summary>
@@ -367,7 +375,7 @@ public async void SetListeningForReportEvents(bool listen)
367
375
reportEventsListeningHandle = await SetListening ( reportEventsListeningHandle , listen ,
368
376
( ) => pn_channel_stream_message_reports ( pointer ) ) ;
369
377
}
370
-
378
+
371
379
internal void BroadcastReportEvent ( ChatEvent chatEvent )
372
380
{
373
381
OnReportEvent ? . Invoke ( chatEvent ) ;
@@ -378,13 +386,13 @@ public async void SetListeningForReadReceiptsEvents(bool listen)
378
386
readReceiptsListeningHandle = await SetListening ( readReceiptsListeningHandle , listen ,
379
387
( ) => pn_channel_stream_read_receipts ( pointer ) ) ;
380
388
}
381
-
389
+
382
390
public async void SetListeningForTyping ( bool listen )
383
391
{
384
392
typingListeningHandle = await SetListening ( typingListeningHandle , listen ,
385
393
( ) => pn_channel_get_typing ( pointer ) ) ;
386
394
}
387
-
395
+
388
396
public async void SetListeningForPresence ( bool listen )
389
397
{
390
398
presenceListeningHandle = await SetListening ( presenceListeningHandle , listen ,
@@ -437,7 +445,8 @@ internal void TryParseAndBroadcastTypingEvent(List<string> userIds)
437
445
{
438
446
indicator . Stop ( ) ;
439
447
typingIndicators . Remove ( key ) ;
440
- indicator . Dispose ( ) ; ;
448
+ indicator . Dispose ( ) ;
449
+ ;
441
450
}
442
451
}
443
452
@@ -600,10 +609,10 @@ public async void Connect()
600
609
{
601
610
return ;
602
611
}
612
+
603
613
connectionHandle = await SetListening ( connectionHandle , true , ( ) => pn_channel_connect ( pointer ) ) ;
604
614
}
605
615
606
- // TODO: Shouldn't join have additional parameters?
607
616
/// <summary>
608
617
/// Joins the channel.
609
618
/// <para>
@@ -626,13 +635,24 @@ public async void Connect()
626
635
/// <seealso cref="OnMessageReceived"/>
627
636
/// <seealso cref="Connect"/>
628
637
/// <seealso cref="Disconnect"/>
629
- public async void Join ( )
638
+ public async void Join ( ChatMembershipData ? membershipData = null )
630
639
{
631
640
if ( connectionHandle != IntPtr . Zero )
632
641
{
633
642
return ;
634
643
}
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
+ }
636
656
}
637
657
638
658
/// <summary>
@@ -659,6 +679,7 @@ public void Disconnect()
659
679
{
660
680
return ;
661
681
}
682
+
662
683
CUtilities . CheckCFunctionResult ( pn_channel_disconnect ( pointer ) ) ;
663
684
pn_callback_handle_dispose ( connectionHandle ) ;
664
685
connectionHandle = IntPtr . Zero ;
@@ -690,6 +711,7 @@ public async void Leave()
690
711
{
691
712
return ;
692
713
}
714
+
693
715
var connectionHandleCopy = connectionHandle ;
694
716
connectionHandle = IntPtr . Zero ;
695
717
CUtilities . CheckCFunctionResult ( await Task . Run ( ( ) =>
@@ -698,6 +720,7 @@ public async void Leave()
698
720
{
699
721
return 0 ;
700
722
}
723
+
701
724
pn_channel_leave ( pointer ) ;
702
725
pn_callback_handle_dispose ( connectionHandleCopy ) ;
703
726
return 0 ;
0 commit comments