using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using System.Net.Sockets; using ServerEngine.Manager; using System.Threading; using ServerEngine; namespace ServerEngine.Sockets { class ServerSocket { public int port; public int max_users_on; TcpListener Listener; public Thread ServerThread; public int users_on; public ServerSocket(int Port, int Max_users_on) { port = Port; max_users_on = Max_users_on; Program.Users = new Usermanager[max_users_on]; users_on = 0; Listener = new TcpListener(IPAddress.Any, port); Listener.Start(); iRun(); } public void iRun() { ServerThread = new Thread(run); ServerThread.Start(); } public void run() { try { while (true) { int uo = 0; for (int i = 0; i < Program.Users.Length; i++) { if (Program.Users[i] != null) { if (Program.Users[i].used) { uo++; } } } users_on = uo; TcpClient tmp = Listener.AcceptTcpClient(); if (tmp != null && max_users_on > users_on) { int res = -1; for (int i = 0; i < Program.Users.Length; i++) { if (Program.Users[i] != null) { if (Program.Users[i].used == false) { res = i; break; } } else { res = i; break; } } if (res != -1) { //Free Socket Found!!! Program.Users[res] = new Usermanager(); Program.Users[res].Sck = tmp; Program.Users[res].used = true; Program.CTCP[res] = new TcpSck(res); Thread CWThread = new Thread(Program.CTCP[res].run); CWThread.Start(); } } } } catch { Console.WriteLine("Error Starting Server Thread :("); } } } }