1- using System . Net . WebSockets ;
1+ using System . Diagnostics ;
2+ using System . Net . WebSockets ;
23using System . Reactive . Linq ;
34using System . Reactive . Subjects ;
45using System . Text . Json ;
@@ -9,19 +10,17 @@ namespace Linq2GraphQL.Client.Subscriptions;
910
1011public class WSClient : IAsyncDisposable
1112{
13+ private readonly GraphClient _graphClient ;
1214 private readonly GraphQLRequest payload ;
13- private readonly SubscriptionProtocol subscriptionProtocol ;
1415
1516 private readonly Subject < string > subscriptionSubject = new ( ) ;
16- private readonly string url ;
1717 private readonly WebsocketClient client ;
1818
1919 private readonly JsonSerializerOptions jsonOptions ;
2020
21- public WSClient ( string url , SubscriptionProtocol subprotocol , GraphQLRequest payload )
21+ public WSClient ( GraphClient graphClient , GraphQLRequest payload )
2222 {
23- this . url = url ;
24- subscriptionProtocol = subprotocol ;
23+ _graphClient = graphClient ;
2524 this . payload = payload ;
2625 jsonOptions = new JsonSerializerOptions
2726 {
@@ -35,7 +34,7 @@ public WSClient(string url, SubscriptionProtocol subprotocol, GraphQLRequest pay
3534 return ws ;
3635 } ) ;
3736
38- client = new WebsocketClient ( new Uri ( url ) , factory )
37+ client = new WebsocketClient ( new Uri ( _graphClient . SubscriptionUrl ) , factory )
3938 {
4039 ReconnectTimeout = TimeSpan . FromSeconds ( 30 )
4140 } ;
@@ -66,15 +65,25 @@ public async Task Start()
6665 //Filter General response
6766 var tt = client . MessageReceived . Select ( m => JsonSerializer . Deserialize < WebsocketResponse > ( m . ToString ( ) ) ) ;
6867
69- tt . Where ( e => e . Type == "ping" ) . Subscribe ( msg => SendRequest ( new WebsocketRequest ( "pong" ) ) ) ;
68+ tt . Where ( e => e . Type == WebsocketRequestTypes . PING ) . Subscribe ( msg => SendRequest ( new WebsocketRequest ( WebsocketRequestTypes . PONG ) ) ) ;
7069
7170 tt . Where ( e => ! string . IsNullOrEmpty ( e ? . Id ) ) . Subscribe ( r =>
7271 {
7372 subscriptionSubject . OnNext ( r . Payload ? . ToString ( ) ) ;
7473 } ) ;
7574
7675 await client . Start ( ) ;
77- SendRequest ( new WebsocketRequest ( "connection_init" ) ) ;
76+
77+ var initRequest = new WebsocketRequest ( WebsocketRequestTypes . CONNECTION_INIT ) ;
78+ if ( _graphClient . WSConnectionInitPayload is not null )
79+ {
80+ var initPayload = await _graphClient . WSConnectionInitPayload ( _graphClient ) ;
81+ if ( initPayload is not null )
82+ {
83+ initRequest . Payload = initPayload ;
84+ }
85+ }
86+ SendRequest ( initRequest ) ;
7887
7988 var subscriptionRequest = new WebsocketRequest ( GetSubscribeCommand ( ) )
8089 {
@@ -87,37 +96,38 @@ public async Task Start()
8796
8897 private string GetSubprotocolString ( )
8998 {
90- switch ( subscriptionProtocol )
99+ switch ( _graphClient . SubscriptionProtocol )
91100 {
92101 case SubscriptionProtocol . GraphQLWebSocket :
93- return "graphql-transport-ws" ;
102+ return SubscriptionProtocols . GRAPGQL_TRANSPORT_WS ;
94103
95104 case SubscriptionProtocol . ApolloWebSocket :
96- return "graphql-ws" ;
105+ return SubscriptionProtocols . GRAPHQL_WS ;
97106
98107 default :
99- throw new Exception ( $ "{ subscriptionProtocol } is unknown") ;
108+ throw new Exception ( $ "{ _graphClient . SubscriptionProtocol } is unknown") ;
100109 }
101110 }
102111
103112 private string GetSubscribeCommand ( )
104113 {
105- switch ( subscriptionProtocol )
114+ switch ( _graphClient . SubscriptionProtocol )
106115 {
107116 case SubscriptionProtocol . GraphQLWebSocket :
108- return "subscribe" ;
117+ return SubscribeCommands . SUBSCRIBE ;
109118
110119 case SubscriptionProtocol . ApolloWebSocket :
111- return "start" ;
120+ return SubscribeCommands . START ;
112121
113122 default :
114- throw new Exception ( $ "{ subscriptionProtocol } is unknown") ;
123+ throw new Exception ( $ "{ _graphClient . SubscriptionProtocol } is unknown") ;
115124 }
116125 }
117126
118- private void LogMessage ( string message )
127+ private static void LogMessage ( string message )
119128 {
120- Console . WriteLine ( $ "{ message } - { DateTime . Now . ToString ( "T" ) } ") ;
129+ // Write logs to debug console
130+ Debug . WriteLine ( $ "{ message } - { DateTime . Now . ToString ( "T" ) } ") ;
121131 }
122132
123133 private void SendRequest ( WebsocketRequest request )
0 commit comments