diff --git a/Multikill-Server/Multikill-Server.csproj b/Multikill-Server/Multikill-Server.csproj
index 9e76bfe..3c44111 100644
--- a/Multikill-Server/Multikill-Server.csproj
+++ b/Multikill-Server/Multikill-Server.csproj
@@ -48,6 +48,9 @@
+
+
+
diff --git a/Multikill-Server/Program.cs b/Multikill-Server/Program.cs
index 057ffe1..9ee95b3 100644
--- a/Multikill-Server/Program.cs
+++ b/Multikill-Server/Program.cs
@@ -1,90 +1,23 @@
-using LiteNetLib;
-using LiteNetLib.Utils;
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Net.Sockets;
-using System.Threading;
+using System;
+using Multikill_Server.Unity;
namespace Multikill_Server
{
- public class MultikillServer : INetEventListener
+ class Program
{
- private NetManager server;
- private List connectedClients = new List();
-
static void Main(string[] args)
{
- MultikillServer multiplayerServer = new MultikillServer();
- multiplayerServer.StartServer();
- }
+ MultikillServer server = new MultikillServer();
+ server.StartServer();
- public void StartServer()
- {
- server = new NetManager(this)
- {
- AutoRecycle = true
- };
- server.Start(9050);
- Console.WriteLine("Server started on port 9050.");
-
- while (!Console.KeyAvailable || Console.ReadKey().Key != ConsoleKey.Escape)
+ Console.WriteLine("Press ESC to stop the server...");
+ while (Console.ReadKey(true).Key != ConsoleKey.Escape)
{
server.PollEvents();
- Thread.Sleep(15);
}
- server.Stop();
- }
-
- public void OnPeerConnected(NetPeer peer)
- {
- Console.WriteLine($"Client connected: {peer.Address}");
- connectedClients.Add(peer);
- }
-
- public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
- {
- Console.WriteLine($"Client disconnected: {peer.Address}. Reason: {disconnectInfo.Reason}");
- connectedClients.Remove(peer);
- }
-
- public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod)
- {
- string receivedMessage = reader.GetString();
- Console.WriteLine($"Received from {peer.Address}: {receivedMessage}");
-
- NetDataWriter writer = new NetDataWriter();
- writer.Put(receivedMessage);
-
- foreach (var client in connectedClients)
- {
- if (client != peer)
- {
- client.Send(writer, DeliveryMethod.ReliableOrdered);
- }
- }
- }
-
- public void OnConnectionRequest(ConnectionRequest request)
- {
- request.Accept();
- Console.WriteLine($"Incoming connection request from: {request.RemoteEndPoint}");
- }
-
- public void OnNetworkError(IPEndPoint endPoint, SocketError socketError)
- {
- Console.WriteLine($"Network error occurred at {endPoint}: {socketError}");
- }
-
- public void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType)
- {
- Console.WriteLine($"Received unconnected message from {remoteEndPoint}");
- }
-
- public void OnNetworkLatencyUpdate(NetPeer peer, int latency)
- {
- Console.WriteLine($"Latency update for {peer.Address}: {latency}ms");
+ server.StopServer();
+ Console.WriteLine("Server stopped.");
}
}
}
\ No newline at end of file
diff --git a/Multikill-Server/Unity/MovementHandler.cs b/Multikill-Server/Unity/MovementHandler.cs
new file mode 100644
index 0000000..961b472
--- /dev/null
+++ b/Multikill-Server/Unity/MovementHandler.cs
@@ -0,0 +1,62 @@
+using LiteNetLib;
+using LiteNetLib.Utils;
+using Multikill_Server.Unity;
+using System.Collections.Generic;
+
+namespace Multikill_Server.Unity
+{
+ public class MovementHandler
+ {
+ private MultikillServer server;
+
+ public MovementHandler(MultikillServer server)
+ {
+ this.server = server;
+ }
+
+ public void HandleMovement(NetPeer peer, NetPacketReader reader)
+ {
+ // Read position data sent from the client
+ float posX = reader.GetFloat();
+ float posY = reader.GetFloat();
+ float posZ = reader.GetFloat();
+ float rotX = reader.GetFloat();
+ float rotY = reader.GetFloat();
+ float rotZ = reader.GetFloat();
+
+ // Update player data on the server
+ if (server.connectedClients.ContainsKey(peer))
+ {
+ server.connectedClients[peer].PositionX = posX;
+ server.connectedClients[peer].PositionY = posY;
+ server.connectedClients[peer].PositionZ = posZ;
+ server.connectedClients[peer].RotationX = rotX;
+ server.connectedClients[peer].RotationY = rotY;
+ server.connectedClients[peer].RotationZ = rotZ;
+ }
+
+ // Broadcast the player's movement to all other clients
+ BroadcastMovement(peer, posX, posY, posZ, rotX, rotY, rotZ);
+ }
+
+ private void BroadcastMovement(NetPeer sender, float posX, float posY, float posZ, float rotX, float rotY, float rotZ)
+ {
+ NetDataWriter writer = new NetDataWriter();
+ writer.Put(sender.Id);
+ writer.Put(posX);
+ writer.Put(posY);
+ writer.Put(posZ);
+ writer.Put(rotX);
+ writer.Put(rotY);
+ writer.Put(rotZ);
+
+ foreach (var client in server.connectedClients.Keys)
+ {
+ if (client != sender) // Don't send the update back to the sender
+ {
+ client.Send(writer, DeliveryMethod.Unreliable);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Multikill-Server/Unity/MultikillServer.cs b/Multikill-Server/Unity/MultikillServer.cs
new file mode 100644
index 0000000..479ce0e
--- /dev/null
+++ b/Multikill-Server/Unity/MultikillServer.cs
@@ -0,0 +1,80 @@
+using LiteNetLib;
+using Multikill_Server;
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+
+namespace Multikill_Server.Unity
+{
+ public class MultikillServer : INetEventListener
+ {
+ private NetManager server;
+ public Dictionary connectedClients = new Dictionary();
+ private MovementHandler movementHandler;
+
+ public MultikillServer()
+ {
+ movementHandler = new MovementHandler(this);
+ }
+
+ public void StartServer()
+ {
+ server = new NetManager(this)
+ {
+ AutoRecycle = true
+ };
+ server.Start(9050); // Listen on port 9050
+ Console.WriteLine("Server started on port 9050.");
+ }
+
+ public void StopServer()
+ {
+ server.Stop();
+ }
+
+ public void PollEvents()
+ {
+ server.PollEvents();
+ }
+
+ public void OnPeerConnected(NetPeer peer)
+ {
+ Console.WriteLine($"Client connected: {peer.Address}");
+ connectedClients.Add(peer, new PlayerData());
+ }
+
+ public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
+ {
+ Console.WriteLine($"Client disconnected: {peer.Address}. Reason: {disconnectInfo.Reason}");
+ connectedClients.Remove(peer);
+ }
+
+ public void OnConnectionRequest(ConnectionRequest request)
+ {
+ request.Accept();
+ Console.WriteLine($"Incoming connection request from: {request.RemoteEndPoint}");
+ }
+
+ public void OnNetworkError(IPEndPoint endPoint, SocketError socketError)
+ {
+ Console.WriteLine($"Network error occurred at {endPoint}: {socketError}");
+ }
+
+ public void OnNetworkLatencyUpdate(NetPeer peer, int latency)
+ {
+ Console.WriteLine($"Latency update for {peer.Address}: {latency}ms");
+ }
+
+ public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod)
+ {
+ // Delegate movement data handling to MovementHandler
+ movementHandler.HandleMovement(peer, reader);
+ }
+
+ public void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType)
+ {
+ Console.WriteLine($"Received unconnected message from {remoteEndPoint}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Multikill-Server/Unity/PlayerData.cs b/Multikill-Server/Unity/PlayerData.cs
new file mode 100644
index 0000000..0a066a1
--- /dev/null
+++ b/Multikill-Server/Unity/PlayerData.cs
@@ -0,0 +1,15 @@
+namespace Multikill_Server.Unity
+{
+ public class PlayerData
+ {
+ public float PositionX { get; set; }
+ public float PositionY { get; set; }
+ public float PositionZ { get; set; }
+
+ public float RotationX { get; set; }
+ public float RotationY { get; set; }
+ public float RotationZ { get; set; }
+
+ // TODO, add health etc here
+ }
+}
\ No newline at end of file