@@ -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