using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace SamaPager_Server { internal class Server { internal IPAddress ListeningIp { get; set; } internal int Port { get; set; } internal UdpClient UdpServer { get; set; } internal IPEndPoint ServerEndPoint { get; set; } internal Server(IPAddress listeningIP, int port) { this.ListeningIp = listeningIP; this.Port = port; } internal string StartServer() { ServerEndPoint = new IPEndPoint(this.ListeningIp, this.Port); try { this.UdpServer = new UdpClient(ServerEndPoint); return $"Listening on {ServerEndPoint}"; } catch(Exception ex) { return $"Error ({ex.Message})"; } } internal string StartListening() { IPEndPoint receiveEndPoint = ServerEndPoint; byte[] receivedBytes = UdpServer.Receive(ref receiveEndPoint); string receivedMessage = Encoding.UTF8.GetString(receivedBytes); byte[] bytesToSend; switch (receivedMessage) { case "!getDateTime": bytesToSend = Encoding.UTF8.GetBytes($"Hi, it's {DateTime.Now}"); this.UdpServer.Send(bytesToSend, bytesToSend.Length, receiveEndPoint); return $"Command \"!getDateTime\" received by {receiveEndPoint}, sent local server time"; case "!getCurrentDir": bytesToSend = Encoding.UTF8.GetBytes($"I'm working in {Environment.CurrentDirectory}"); this.UdpServer.Send(bytesToSend, bytesToSend.Length, receiveEndPoint); return $"Command \"!getCurrentDir\" received by {receiveEndPoint}, sent server working directory"; case "!getCurrentUser": bytesToSend = Encoding.UTF8.GetBytes($"Hi, I'm running as {Environment.UserName}"); this.UdpServer.Send(bytesToSend, bytesToSend.Length, receiveEndPoint); return $"Command \"!getCurrentUser\" received by {receiveEndPoint}, sent the username the server is running on"; default: return $"[{DateTime.Now}] {receiveEndPoint}: {receivedMessage}"; } } internal void KillServer() { this.UdpServer.Close(); } } }