/// <summary> /// The connect socket. /// </summary> /// <param name="socket"> /// The socket. /// </param> /// <param name="userData"> /// The userData. /// </param> /// <param name="server"> /// The server. /// </param> private void ConnectSocket(IWebSocketConnection socket, UserModel userData, IServer server) { server.ConnectedSockets.Add(socket, userData); var authMessage = new Payloads.Server.AuthMessage() { Message = "SUCCESS", UsersList = server.ConnectedSockets.Values.Select(user => user.Login).ToArray() }; socket.Send(authMessage); var userConnectionMessage = new Payloads.Server.UserConnectionMessage() { Login = server.ConnectedSockets[socket].Login, Status = "CONNECT" }; server.SendToAllExcludeOne(userConnectionMessage, exclude: socket); }
/// <summary> /// The authorize. /// </summary> /// <param name="socket"> /// The socket. /// </param> /// <param name="webSocketMessage"> /// The web socket message. /// </param> /// <param name="server"> /// The server. /// </param> private void Authorize(IWebSocketConnection socket, string webSocketMessage, IServer server) { try { var data = Newtonsoft.Json.JsonConvert.DeserializeObject <WebSocketMessage <Payloads.Client.AuthMessage> >(webSocketMessage); var tokenData = AppContext.Instance.UsersTokens.FirstOrDefault(userToken => data.Payload.Token == userToken.Token); if (tokenData != null) { var userData = AppContext.Instance.Users.FirstOrDefault(user => user.Id == tokenData.UserId); if (userData != null && !server.ConnectedSockets.ContainsValue(userData)) { ConnectSocket(socket, userData, server); } else { var authMessage = new Payloads.Server.AuthMessage() { Message = "ERROR.ALREADY_CONNECTED" }; socket.Send(authMessage); DisconnectSocket(socket, server); } } else { var authMessage = new Payloads.Server.AuthMessage() { Message = "ERROR.NOT_FOUND" }; socket.Send(authMessage); DisconnectSocket(socket, server); } } catch (System.Exception e) { System.Console.WriteLine(e.ToString()); } }