11using System . Net ;
22using ConnectX . Client . Interfaces ;
3+ using ConnectX . Shared ;
34using ConnectX . Shared . Helpers ;
45using ConnectX . Shared . Messages ;
56using ConnectX . Shared . Messages . Identity ;
@@ -83,48 +84,63 @@ private async Task CheckServerLivenessAsync(CancellationToken cancellationToken)
8384 }
8485 }
8586
86- public async Task ConnectAsync ( CancellationToken cancellationToken )
87+ public async Task < SigninResult ? > ConnectAsync ( CancellationToken cancellationToken )
8788 {
88- _dispatcher . AddHandler < SigninSucceeded > ( OnSigninSucceededReceived ) ;
89-
9089 _logger . LogConnectingToServer ( ) ;
9190
92- try
93- {
94- var endPoint = new IPEndPoint ( _settingProvider . ServerAddress , _settingProvider . ServerPort ) ;
95- var session = await _tcpConnector . ConnectAsync ( endPoint , cancellationToken ) ;
96-
97- if ( session == null )
98- {
99- _logger . LogFailedToConnectToServer ( endPoint ) ;
100- return ;
101- }
91+ var endPoint = new IPEndPoint ( _settingProvider . ServerAddress , _settingProvider . ServerPort ) ;
92+ var session = await _tcpConnector . ConnectAsync ( endPoint , cancellationToken ) ;
10293
103- session . BindTo ( _dispatcher ) ;
104- session . StartAsync ( cancellationToken ) . Forget ( ) ;
94+ if ( session == null )
95+ {
96+ _logger . LogFailedToConnectToServer ( endPoint ) ;
97+ return null ;
98+ }
10599
106- _logger . LogSendingSigninMessageToServer ( ) ;
100+ session . BindTo ( _dispatcher ) ;
101+ session . StartAsync ( cancellationToken ) . Forget ( ) ;
107102
108- await Task . Delay ( 1000 , cancellationToken ) ;
109- await _dispatcher . SendAsync ( session , new SigninMessage
110- {
111- JoinP2PNetwork = _settingProvider . JoinP2PNetwork ,
112- DisplayName = $ "User-{ Guid . CreateVersion7 ( ) . ToString ( "N" ) [ ^ 6 ..] } "
113- } , cancellationToken ) ;
103+ _logger . LogSendingSigninMessageToServer ( ) ;
114104
115- await TaskHelper . WaitUntilAsync ( ( ) => IsSignedIn , cancellationToken ) ;
105+ await Task . Delay ( 1000 , cancellationToken ) ;
116106
117- _logger . LogConnectedAndSignedToServer ( endPoint ) ;
107+ var signin = new SigninMessage
108+ {
109+ JoinP2PNetwork = _settingProvider . JoinP2PNetwork ,
110+ DisplayName = $ "User-{ Guid . CreateVersion7 ( ) . ToString ( "N" ) [ ^ 6 ..] } ",
111+ LinkProtocolMajor = LinkProtocolConstants . ProtocolMajor ,
112+ LinkProtocolMinor = LinkProtocolConstants . ProtocolMinor
113+ } ;
118114
119- ServerSession = session ;
120- IsConnected = true ;
115+ var result = await _dispatcher . SendAndListenOnce < SigninMessage , SigninResult > ( session , signin , cancellationToken ) ;
121116
122- Hive . Common . Shared . Helpers . TaskHelper . FireAndForget ( ( ) => CheckServerLivenessAsync ( cancellationToken ) ) ;
117+ if ( result == null )
118+ {
119+ _logger . LogWaitForSigninResultFailed ( endPoint ) ;
120+ return null ;
123121 }
124- finally
122+
123+ if ( ! result . Succeeded )
125124 {
126- _dispatcher . RemoveHandler < SigninSucceeded > ( OnSigninSucceededReceived ) ;
125+ _logger . LogServerRefusedClientToLogin ( endPoint ) ;
126+ return result ;
127127 }
128+
129+ _logger . LogSuccessfullyLoggedIn ( UserId ) ;
130+
131+ IsSignedIn = result . Succeeded ;
132+ UserId = result . UserId ;
133+
134+ await TaskHelper . WaitUntilAsync ( ( ) => IsSignedIn , cancellationToken ) ;
135+
136+ _logger . LogConnectedAndSignedToServer ( endPoint ) ;
137+
138+ ServerSession = session ;
139+ IsConnected = true ;
140+
141+ Hive . Common . Shared . Helpers . TaskHelper . FireAndForget ( ( ) => CheckServerLivenessAsync ( cancellationToken ) ) ;
142+
143+ return result ;
128144 }
129145
130146 public async Task DisconnectAsync ( CancellationToken cancellationToken )
@@ -142,14 +158,6 @@ public async Task DisconnectAsync(CancellationToken cancellationToken)
142158 IsConnected = false ;
143159 }
144160
145- private void OnSigninSucceededReceived ( MessageContext < SigninSucceeded > obj )
146- {
147- IsSignedIn = true ;
148- UserId = obj . Message . UserId ;
149-
150- _logger . LogSuccessfullyLoggedIn ( UserId ) ;
151- }
152-
153161 private void OnHeartBeatReceived ( MessageContext < HeartBeat > ctx )
154162 {
155163 _lastHeartBeatTime = DateTime . UtcNow ;
@@ -228,4 +236,10 @@ internal static partial class ServerLinkHolderLoggers
228236
229237 [ LoggerMessage ( LogLevel . Critical , "[CLIENT] Link with server [{relayEndPoint}] is down, last heartbeat received [{seconds} seconds ago]" ) ]
230238 public static partial void LogMainServerHeartbeatTimeout ( this ILogger logger , IPEndPoint relayEndPoint , double seconds ) ;
239+
240+ [ LoggerMessage ( LogLevel . Error , "[CLIENT] Wait for signin result failed, endpoint: {endPoint}" ) ]
241+ public static partial void LogWaitForSigninResultFailed ( this ILogger logger , IPEndPoint endPoint ) ;
242+
243+ [ LoggerMessage ( LogLevel . Error , "[CLIENT] Server refused client to login at endpoint {endPoint}" ) ]
244+ public static partial void LogServerRefusedClientToLogin ( this ILogger logger , IPEndPoint endPoint ) ;
231245}
0 commit comments