Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using WORR.Shared;
- using WORR.Shared.Network;
- using WORR.Shared.Misc;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- using System.Data;
- using System.Data.SqlClient;
- using System.Reflection;
- using System.IO;
- using WORR.Shared.Database;
- namespace WORR.LoginServer.Network
- {
- public partial class loginServer : BaseSocket
- {
- public List<Client> listClient = new List<Client>();
- public List<Server> listServer = new List<Server>();
- int login_acceslevel;
- bool CreateLoginAccount;
- bool LogEnable;
- string ServerPassword;
- string ClientLogPath;
- string ServerLogPath;
- public Database logindb;
- public loginServer(string ip, int Client_passive_port, int Server_passive_port, string ServerPass, int Acceslvl, bool CreateLoginAcc, string host_name, string database_name, bool logenable, string logpath)
- : base(ip, Client_passive_port, Server_passive_port)
- {
- Log.log(Log.LogType.MSG_SQL, "Starting database...");
- logindb = new Database(host_name, database_name,"root","omgrofl");
- Log.log(Log.LogType.MSG_SQL, "Database successfully started...");
- login_acceslevel = Acceslvl;
- CreateLoginAccount = CreateLoginAcc;
- ServerPassword = ServerPass;
- LogEnable = logenable;
- ClientLogPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Client." + logpath;
- ServerLogPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Server." + logpath;
- //Read thread start before the first connection
- Thread getReadClients = new Thread(new ThreadStart(CgetRead));
- getReadClients.Start();
- Thread getofflineClients = new Thread(new ThreadStart(CCheckIfStillConnected));
- getofflineClients.Start();
- Thread Cmainloop = new Thread(new ThreadStart(CAcceptloop));
- Cmainloop.Start();
- Thread getReadServer = new Thread(new ThreadStart(SgetRead));
- getReadServer.Start();
- Thread getofflineServers = new Thread(new ThreadStart(SCheckIfStillConnected));
- getofflineServers.Start();
- Thread Smainloop = new Thread(new ThreadStart(SAcceptloop));
- Smainloop.Start();
- }
- //Where servers , channels are handles
- #region ServerCore
- //Main loop which accept client
- void SAcceptloop()
- {
- while (true)
- {
- CurrentServer = localListenSock.Accept();
- SAddServer(CurrentServer);
- }
- }
- //Add an user when a client is connect
- public void SAddServer(Socket sock)
- {
- Server newserver = new Server();
- newserver.serversock = new WORRSocket();
- newserver.serversock.socket = sock;
- listServer.Add(newserver);
- Log.log(Log.LogType.MSG_WARNING, "New world server try connect from " + sock.RemoteEndPoint, ServerLogPath);
- }
- //Check if server are still connect
- private void SCheckIfStillConnected()
- {
- while (true)
- {
- for (int i = 0; i < listServer.Count; i++)
- {
- if (listServer[i].serversock.socket.Poll(10, SelectMode.SelectRead) && listServer[i].serversock.socket.Available == 0)
- {
- if (!ServerReadlock)
- {
- SDisconnectServer(i);
- }
- }
- }
- Thread.Sleep(5);
- }
- }
- //Disconnect an user
- public void SDisconnectServer(int server_index)
- {
- Log.log(Log.LogType.MSG_NOTICE, "World Server disconnect (IP : " + listServer[server_index].serversock.socket.RemoteEndPoint + ")", ServerLogPath);
- listServer[server_index].serversock.socket.Close();
- listServer.RemoveAt(server_index);
- /*if (listClient[server_index] != null)
- {
- listClient.RemoveAt(server_index);
- }*/
- }
- //Read all packets
- void SgetRead()
- {
- while (true)
- {
- ServerReadlock = true;
- for (int i = 0; i != listServer.Count; i++)
- {
- if (listServer[i].serversock.socket.Available > 0)
- {
- Packet serverPacket = listServer[i].serversock.ReceiveData();
- OnReceiveSPacket(serverPacket, listServer[i]);
- }
- }
- ServerReadlock = false;
- Thread.Sleep(10);
- }
- }
- //Handle packets
- void OnReceiveSPacket(Packet serverPacket, Server server)
- {
- switch (serverPacket.Command)
- {
- case 0x500:
- pakConnectionRequest(ref server, serverPacket);
- break;
- case 0x501:
- pakGetWorldInfo(ref server, serverPacket);
- break;
- case 0x502:
- pakGetChannelsInfo(ref server, serverPacket);
- break;
- default:
- Log.log(Log.LogType.MSG_WARNING, "Login Server Received unknown packet. Command: " + String.Format("{0:x}", serverPacket.Command) + " Size: " + serverPacket.Size);
- break;
- }
- }
- #endregion
- #region ClientCore
- //Main loop which accept client
- void CAcceptloop()
- {
- while (true)
- {
- CurrentClient = ClientSock.Accept();
- CAddUser(CurrentClient);
- }
- }
- //Add an user when a client is connect
- public void CAddUser(Socket sock)
- {
- Client newuser = new Client();
- newuser.clientsock = new WORRSocket();
- newuser.clientsock.socket = sock;
- listClient.Add(newuser);
- Log.log(Log.LogType.MSG_NOTICE, "New client connect (IP : " + newuser.clientsock.socket.RemoteEndPoint.ToString() + ")", ClientLogPath);
- }
- //Check if clients are still connect
- private void CCheckIfStillConnected()
- {
- while (true)
- {
- for (int i = 0; i < listClient.Count; i++)
- {
- if (listClient[i].clientsock.socket.Poll(10, SelectMode.SelectRead) && listClient[i].clientsock.socket.Available == 0)
- {
- if (!ClientReadlock)
- {
- CDisconnectUser(i);
- }
- }
- }
- Thread.Sleep(5);
- }
- }
- //Disconnect an user
- public void CDisconnectUser(int user_index)
- {
- Log.log(Log.LogType.MSG_NOTICE, "Client disconnect (IP : " + listClient[user_index].clientsock.socket.RemoteEndPoint.ToString() + ")", ClientLogPath);
- listClient[user_index].clientsock.socket.Close();
- listClient.RemoveAt(user_index);
- }
- //Read all packets
- void CgetRead()
- {
- while (true)
- {
- ClientReadlock = true;
- for (int i = 0; i != listClient.Count; i++)
- {
- if (listClient[i].clientsock.socket.Available > 0)
- {
- Packet userPacket = listClient[i].clientsock.ReceiveData();
- OnReceiveCPacket(userPacket, listClient[i]);
- }
- }
- ClientReadlock = false;
- Thread.Sleep(10);
- }
- }
- //Handle packets
- void OnReceiveCPacket(Packet userPacket, Client user)
- {
- switch (userPacket.Command)
- {
- case 0x703:
- pakEncryptionRequest(user);
- break;
- case 0x708:
- pakUserLogin(ref user, userPacket);
- break;
- case 0x704:
- pakGetChannels(ref user, userPacket);
- break;
- case 0x70a:
- pakGetIP(ref user, userPacket);
- break;
- default:
- Log.log(Log.LogType.MSG_WARNING, "Login Server Received unknown packet. Command: " + String.Format("{0:x}", userPacket.Command) + " Size: " + userPacket.Size);
- break;
- }
- }
- #endregion
- //Packets
- }
- }
Add Comment
Please, Sign In to add comment