using System; using System.Net; using System.Text; using System.Net.Sockets; namespace Launcher_Server.Networking { class ClientHandler { private Boolean HasRegisted; private Socket ClientSocket; private IPEndPoint ClientEndPoint; private Byte[] ClientBuffer; public ClientHandler(Socket HandleSocket) { try { ClientSocket = HandleSocket; ClientEndPoint = (IPEndPoint)HandleSocket.RemoteEndPoint; ClientBuffer = new Byte[Properties.Settings.Default.ByteSize]; ClientSocket.BeginReceive(ClientBuffer, 0, ClientBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveLogin), ClientSocket); } catch { } } private void ReceiveLogin(IAsyncResult Result) { try { Int32 ReceivedLength = ClientSocket.EndReceive(Result); Array.Resize(ref ClientBuffer, ReceivedLength); if (ReceivedLength != 0) { String DecryptedMessage = Crypto.Decrypt(Encoding.ASCII.GetString(ClientBuffer), Properties.Settings.Default.EncryptionKey); String[] SplitMessage = DecryptedMessage.Split('#'); String Type = SplitMessage[0]; String Username = SplitMessage[1]; String Password = SplitMessage[2]; if (Type == "Login") { String LoginMessage = Program.RunQuery.Login(Username, Password); switch (LoginMessage) { case "No Account Found!": { Send("Login#The information you have entered does not match anything on the Database."); break; } case "Server Maintenance!": { Send("Login#Oxion is under maintenance at the moment, please try again later."); break; } case "Account Banned": { Send("Login#Your account has been banned from Oxion!"); break; } case "Charge Back!": { Send("Login#Your account has been banned, for trying to get a non-refundable donation back."); break; } default: { Send(String.Concat("Login#", LoginMessage)); break; } } } ClientBuffer = new Byte[Properties.Settings.Default.ByteSize]; ClientSocket.BeginReceive(ClientBuffer, 0, ClientBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveLogin), ClientSocket); } else { Shutdown(); } } catch { } } private void Send(String Message) { try { Byte[] Buffer = Encoding.ASCII.GetBytes(Crypto.Encrypt(Message, Properties.Settings.Default.EncryptionKey)); ClientSocket.BeginSend(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(MessageSent), ClientSocket); } catch { } } private void MessageSent(IAsyncResult Result) { try { ClientSocket.EndSend(Result); } catch { } } private void Shutdown() { try { ClientSocket.Shutdown(SocketShutdown.Both); ClientSocket.Close(); if (ClientSocket != null) { ClientSocket.Dispose(); } } catch { } } } }