99
1010namespace WebSocketServer . Messages . Handlers
1111{
12+ using System . Linq ;
13+
14+ using WebSocketServer . Models ;
15+
1216 using IWebSocketConnection = Fleck2 . Interfaces . IWebSocketConnection ;
1317
1418 /// <inheritdoc />
@@ -47,13 +51,32 @@ private void Authorize(IWebSocketConnection socket, string webSocketMessage, ISe
4751 {
4852 var data =
4953 Newtonsoft . Json . JsonConvert . DeserializeObject < WebSocketMessage < Payloads . Client . AuthMessage > > ( webSocketMessage ) ;
50- if ( server . ConnectedSockets . ContainsValue ( data . Payload . UserName ) )
54+
55+ var tokenData = AppContext . Instance . UsersTokens . FirstOrDefault ( userToken => data . Payload . AuthToken == userToken . Token ) ;
56+
57+ if ( tokenData != null )
5158 {
52- DisconnectSocket ( socket , data , server ) ;
59+ var userData = AppContext . Instance . Users . FirstOrDefault ( user => user . Id == tokenData . UserId ) ;
60+ if ( userData != null && ! server . ConnectedSockets . ContainsValue ( userData ) )
61+ {
62+ ConnectSocket ( socket , userData , server ) ;
63+ }
64+ else
65+ {
66+ var authMessage = new Payloads . Server . AuthMessage ( )
67+ {
68+ Message =
69+ "Error: you already connected to server!" ,
70+ Status = Payloads . Server . AuthMessage
71+ . StatusCode . Error
72+ } ;
73+ socket . Send ( Helper . BuildMessage ( authMessage ) ) ;
74+ DisconnectSocket ( socket , server ) ;
75+ }
5376 }
5477 else
5578 {
56- ConnectSocket ( socket , data , server ) ;
79+ DisconnectSocket ( socket , server ) ;
5780 }
5881 }
5982 catch ( System . Exception e )
@@ -68,26 +91,25 @@ private void Authorize(IWebSocketConnection socket, string webSocketMessage, ISe
6891 /// <param name="socket">
6992 /// The socket.
7093 /// </param>
71- /// <param name="data ">
72- /// The data .
94+ /// <param name="userData ">
95+ /// The userData .
7396 /// </param>
7497 /// <param name="server">
7598 /// The server.
7699 /// </param>
77- private void ConnectSocket ( IWebSocketConnection socket , WebSocketMessage < Payloads . Client . AuthMessage > data , IServer server )
100+ private void ConnectSocket ( IWebSocketConnection socket , UserModel userData , IServer server )
78101 {
79- server . ConnectedSockets . Add ( socket , data . Payload . UserName ) ;
102+ server . ConnectedSockets . Add ( socket , userData ) ;
80103
81104 var authMessage = new Payloads . Server . AuthMessage ( )
82105 {
83- UserName = data . Payload . UserName ,
84106 Status = Payloads . Server . AuthMessage . StatusCode . Success
85107 } ;
86108 socket . Send ( Helper . BuildMessage ( authMessage ) ) ;
87109
88110 var chatMessage = new Payloads . Server . ChatMessage ( )
89111 {
90- UserName = data . Payload . UserName ,
112+ UserName = server . ConnectedSockets [ socket ] . Login ,
91113 Message = "has joined the chat!"
92114 } ;
93115 Successor . ChatHandler . SendToAll ( chatMessage , server ) ;
@@ -99,22 +121,11 @@ private void ConnectSocket(IWebSocketConnection socket, WebSocketMessage<Payload
99121 /// <param name="socket">
100122 /// The socket.
101123 /// </param>
102- /// <param name="data">
103- /// The data.
104- /// </param>
105124 /// <param name="server">
106125 /// The server.
107126 /// </param>
108- private void DisconnectSocket ( IWebSocketConnection socket , WebSocketMessage < Payloads . Client . AuthMessage > data , IServer server )
127+ private void DisconnectSocket ( IWebSocketConnection socket , IServer server )
109128 {
110- var authMessage = new Payloads . Server . AuthMessage ( )
111- {
112- UserName = data . Payload . UserName ,
113- Message = "Error: the user name <" + data . Payload . UserName + "> is already in use!" ,
114- Status = Payloads . Server . AuthMessage . StatusCode . Error
115- } ;
116- socket . Send ( Helper . BuildMessage ( authMessage ) ) ;
117-
118129 socket . Close ( ) ;
119130 if ( server . ConnectedSockets . ContainsKey ( socket ) )
120131 {
0 commit comments