Files
Pong-2P/server/Program.cs
T
2022-10-23 20:58:01 +02:00

82 lines
2.6 KiB
C#

using LiteNetLib;
using LiteNetLib.Utils;
using shared;
namespace Server
{
public class Program
{
static EventBasedNetListener listener = new();
static NetManager? server;
static NetPacketProcessor processor = new();
static NetSerializer serializer = new();
static string? port;
static string? pswd;
static string gameState = "Idle"; // Idle || Playing || Paused || Ended
static List<NetPeer> players;
public static void Main(string[] args)
{
server = new NetManager(listener);
port = Lib.ReadSetting("PORT");
pswd = Lib.ReadSetting("PSWD");
if (port != null && pswd != null)
{
Console.WriteLine($"Server started on port {port}");
server.Start(int.Parse(port));
}
else
{
Console.Error.WriteLine("Missing port or password in config file !\nClosing server...");
return;
}
serializer.Register<Assignation>();
listener.ConnectionRequestEvent += request =>
{
Console.WriteLine($"New connection request from \"{request.RemoteEndPoint}\"");
request.AcceptIfKey(pswd);
};
listener.PeerConnectedEvent += peer =>
{
Console.WriteLine("Connection accepted for: {0}", peer.EndPoint);
if (peer != null)
{
players.Add(peer);
}
};
listener.PeerDisconnectedEvent += (peer, infos) =>
{
Console.WriteLine($"{peer.EndPoint} has left.\nError code: {infos.SocketErrorCode}\nReason: {infos.Reason}");
players.Remove(peer);
};
while (!Console.KeyAvailable)
{
server.PollEvents();
if (server.GetPeersCount(ConnectionState.Connected) >= 2)
{
// Differents game states
if (gameState == "Idle")
{
Assignation packet = new() { controller = 2, ballX = 0, ballY = 0 };
processor.Send(players[0], packet, DeliveryMethod.ReliableOrdered);
processor.Send(players[1], packet, DeliveryMethod.ReliableOrdered);
Console.WriteLine("Assignation sended");
gameState = "Playing";
}
}
Thread.Sleep(15);
}
server.Stop();
}
}
}