146 lines
5.2 KiB
C#
146 lines
5.2 KiB
C#
using DTLib;
|
|
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
using static DTLib.NetWork;
|
|
|
|
namespace dtlauncher_server
|
|
{
|
|
class Program
|
|
{
|
|
static ConsoleGUI gui = new ConsoleGUI(90, 30);
|
|
static string logfile = $"logs\\client-{DateTime.UtcNow}.log".Replace(':', '-').Replace(' ', '_');
|
|
static Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
//static Dictionary<Socket, Thread> users = new Dictionary<Socket, Thread>();
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
Console.Title = "dtlauncher server";
|
|
gui.ReadFromFile("gui\\main.gui");
|
|
gui.ShowAll();
|
|
NetWork.Log += Log;
|
|
Log("b", $"<{FileWork.ReadFromConfig("server.cfg", "server ip")}> : <{Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port"))}>\n");
|
|
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(
|
|
FileWork.ReadFromConfig("server.cfg", "server ip")),
|
|
Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port"))));
|
|
Log("g", "server started succesfully\n");
|
|
//Thread userCheckThread = new Thread(CloseUnusedUserThreads);
|
|
//userCheckThread.Start();
|
|
try
|
|
{
|
|
mainSocket.Listen(200);
|
|
while (true)
|
|
{
|
|
var userSocket = mainSocket.Accept();
|
|
var userThread = new Thread(new ParameterizedThreadStart(UserStart));
|
|
//users.Add(userSocket, userThread);
|
|
userThread.Start(userSocket);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log("r", $"handler error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (mainSocket.IsBound) mainSocket.CloseSocket();
|
|
Log("r", $"Main() error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n");
|
|
}
|
|
Thread.Sleep(1500);
|
|
}
|
|
}
|
|
|
|
static void Log(string color, string msg)
|
|
{
|
|
ColoredText.WriteColored(color, msg);
|
|
FileWork.Log(logfile, msg);
|
|
}
|
|
|
|
static void Log(string[] input)
|
|
{
|
|
if (input.Length % 2 == 0)
|
|
{
|
|
ColoredText.WriteColored(input);
|
|
string str = "";
|
|
for (ushort i = 0; i < input.Length; i++)
|
|
{
|
|
str += input[++i];
|
|
}
|
|
FileWork.Log(logfile, str);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("error in Log(): every text string must have color string before");
|
|
}
|
|
}
|
|
|
|
static void UserStart(dynamic _handlerSocket)
|
|
{
|
|
Socket handlerSocket = (Socket)_handlerSocket;
|
|
try
|
|
{
|
|
string recieved = handlerSocket.GetData().ToStr();
|
|
if (recieved == "new user connection try")
|
|
{
|
|
handlerSocket.Send("new user connection created".ToBytes());
|
|
while (true)
|
|
{
|
|
recieved = handlerSocket.GetData().ToStr();
|
|
switch (recieved)
|
|
{
|
|
// ответ на NetWork.Ping()
|
|
case "ping":
|
|
handlerSocket.Send("pong".ToBytes());
|
|
break;
|
|
// отправка списка активных серверов
|
|
case "requesting servers list":
|
|
|
|
break;
|
|
case "requesting file":
|
|
recieved = handlerSocket.GetData().ToStr();
|
|
break;
|
|
default:
|
|
throw new Exception("unknown request: " + recieved);
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
throw new Exception("incorrect connection try");
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log("y", $"UserStart() error:\n message:\n {ex.Message}\n");
|
|
handlerSocket.CloseSocket();
|
|
Thread.CurrentThread.Abort();
|
|
}
|
|
}
|
|
|
|
/*static void CloseUnusedUserThreads()
|
|
{
|
|
while (true)
|
|
{
|
|
foreach (Socket s in users.Keys)
|
|
{
|
|
if (!NetWork.Ping(s))
|
|
{
|
|
Log("y", "closing unused user thread\n");
|
|
users[s].Abort();
|
|
users.Remove(s);
|
|
}
|
|
}
|
|
Thread.Sleep(300000);
|
|
}
|
|
}*/
|
|
}
|
|
}
|