private static Packet UserAuthentification(Packet p) { try { ClientAccountLogin packet = (ClientAccountLogin)p; ServerAcknowledgementLogin response = new ServerAcknowledgementLogin(); //Authentification process: modify IsLoggedIn and login variable of the response packet if (User.validateUser(packet.login, packet.password)) { Console.WriteLine("User connected. Sending response."); response.verification = true; response.login = packet.login; } else { response.verification = false; response.login = "******"; } loginPacket = response; return(response); } catch (Exception e) { Console.WriteLine(e.ToString()); } return(null); }
private static Packet Login(Packet p) { ServerAcknowledgementLogin packet = (ServerAcknowledgementLogin)p; if (packet.verification) { //Login logic (create static user) + notification User user = new User(); user.id = packet.id; user.username = packet.login; Session.currentUser = user; Session.isLoggedIn = true; Console.WriteLine("Connected as {0}.", packet.login); } return(null); }
//Dispatcher logic layer public static void ReadCallback(IAsyncResult ar) { try{ String content = String.Empty; //Retrieve the state object and the handler socket // from the async state object StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; //Read data from the client socket int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); content = state.sb.ToString(); if (content.Length > 0) { Packet pck = Packet.Parse(state.buffer); //All the data has been read from the cient. Display it on the console //Console.WriteLine("Read {0} bytes from socket. \n Data : ", content.Length, content); //Business layer: byte[] response = Dispatcher_Server.Switcher(pck); if (response != null && response.Length > 0) { Send(handler, response); sendDone.WaitOne(); } if (Dispatcher_Server.SendingQueue.Count > 0) { //TODO: can tweak to accept generalized packet format, instead of specific foreach (Packet sendingPacket in Dispatcher_Server.SendingQueue) { PacketSendMessage messagePacket = (PacketSendMessage)sendingPacket; Send(Client_SocketID.list_clients[User.GetUserByID(messagePacket.userID).socketID], Packet.Encode(messagePacket.PacketType(), (ICanSerialize)messagePacket)); sendDone.WaitOne(); } } //client/user status as connected (set clientSocketID) else if (Dispatcher_Server.loginPacket?.ID == PacketType.ServerAcknowledgementLogin.ID()) { ServerAcknowledgementLogin loginPacket = (ServerAcknowledgementLogin)Dispatcher_Server.loginPacket; Client_SocketID.list_clients.Add(Client_SocketID.count++, handler); User.GetUserByID(loginPacket.id).connectToCurrentClient(Client_SocketID.count); } } else { ///Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } receiveDone.Set(); } catch (System.Net.Sockets.SocketException e) { Console.WriteLine("Client disconnected"); e.ToString(); } catch (Exception e) { Console.WriteLine(e.ToString()); } }