daily pastebin goal
25%
SHARE
TWEET

Server

a guest Dec 16th, 2018 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net.Sockets;
  4. using System.Threading;
  5. using System.Net;
  6. using ServerData;
  7.  
  8. namespace Server
  9. {
  10.     class Server
  11.     {
  12.         static Socket listenerSocket;
  13.         static List<ClientData> _clients;
  14.  
  15.         static void Main(string[] args)
  16.         {
  17.             listenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  18.             _clients = new List<ClientData>();
  19.  
  20.             IPAddress ip = IPAddress.Parse(Packet.GetIp4Adress());
  21.             IPEndPoint ipEnd = new IPEndPoint(ip, 1337);
  22.  
  23.             Console.WriteLine("Starting server on:" + Packet.GetIp4Adress());
  24.             listenerSocket.Bind(ipEnd);
  25.  
  26.             Thread listenerThread = new Thread(ListenThread);
  27.             listenerThread.Start();
  28.         }
  29.  
  30.         static void ListenThread()
  31.         {
  32.             for (; ; )
  33.             {
  34.                 listenerSocket.Listen(0);
  35.  
  36.                 ClientData client = new ClientData(listenerSocket.Accept());
  37.                 _clients.Add(client);
  38.                 client.SendRegistrationPacket();
  39.             }
  40.         }
  41.  
  42.         public static void Data_IN(object cSocket)
  43.         {
  44.             Socket clientSocket = (Socket)cSocket;
  45.  
  46.             byte[] buffer;
  47.             int readBytes = 0;
  48.  
  49.             for (; ; ) {
  50.                 try
  51.                 {
  52.                     buffer = new byte[clientSocket.SendBufferSize];
  53.                     readBytes = clientSocket.Receive(buffer);
  54.  
  55.                     if (readBytes > 0)
  56.                     {
  57.                         Packet p = new Packet(buffer);
  58.                         DataManager(p);
  59.                     }
  60.                 }
  61.                 catch (SocketException ex)
  62.                 {
  63.                     Console.WriteLine("Client Disconnected");
  64.                 }
  65.             }
  66.         }
  67.  
  68.         public static void DataManager(Packet p)
  69.         {
  70.             Console.WriteLine("::> "+p.packetType);
  71.  
  72.             switch (p.packetType)
  73.             {
  74.                 case PacketType.PlayerRegistration:
  75.                    
  76.                     foreach (ClientData c in _clients)
  77.                     {
  78.                         Packet playersUpdate = new Packet(PacketType.PlayerJoined, "server", c.ID, c.x.ToString(), c.y.ToString());
  79.                         SendTo(p.senderID, playersUpdate);
  80.                     }
  81.                     break;
  82.  
  83.                 case PacketType.PlayerShootingRequest:
  84.  
  85.                     int clickX = int.Parse(p.gData[0]);
  86.                     int clickY = int.Parse(p.gData[1]);
  87.                    
  88.                     int Index = _clients.FindIndex(x => x.ID == p.senderID);
  89.                     _clients[Index].ammo--;
  90.                     Packet ShooterStatUpdate = new Packet(PacketType.PlayerStatUpdate, "server", _clients[Index].ammo.ToString());
  91.                     SendTo(p.senderID, ShooterStatUpdate);
  92.  
  93.                     foreach (ClientData c in _clients)
  94.                     {
  95.                         float top = c.y + (float.Parse(p.gData[3]) / 2f);
  96.                         float btm = c.y - (float.Parse(p.gData[3]) / 2f);
  97.                         float left = c.x - (float.Parse(p.gData[2]) / 2f);
  98.                         float right = c.x + (float.Parse(p.gData[2]) / 2f);
  99.  
  100.                         int chkSum = 0;
  101.                         chkSum = clickY <= top ? 1 : 0;
  102.                         chkSum = clickY >= btm ? 1 : 0;
  103.                         chkSum = clickX >= left ? 1 : 0;
  104.                         chkSum = clickX <= right ? 1 : 0;
  105.  
  106.                         if (chkSum == 4)
  107.                         {
  108.                             Index = _clients.FindIndex(x => x == c);
  109.                             _clients[Index].health -= 7;
  110.                             Packet ShotStatUpdate = new Packet(PacketType.PlayerStatUpdate, "server", _clients[Index].health.ToString());
  111.                             SendTo(_clients[Index].ID, ShotStatUpdate);
  112.  
  113.                             break;
  114.                         }
  115.                     }
  116.  
  117.                     break;
  118.                 case PacketType.PlayerPositionUpdate:
  119.                     SendToAll(p);
  120.                     break;
  121.  
  122.                 case PacketType.PlayerVisualUpdate:
  123.                     SendToAllExpect(p.senderID, p);
  124.                     break;
  125.             }
  126.         }
  127.  
  128.         public static void SendTo(string ID, Packet p)
  129.         {
  130.             Console.WriteLine("<:: " + p.packetType + ", " + ID);
  131.             _clients.Find(x => x.ID == ID).clientSocket.Send(p.toBytes());
  132.         }
  133.         public static void SendToAllExpect(string ID, Packet p)
  134.         {
  135.             Console.WriteLine("<:: " + p.packetType + " -Execpt");
  136.  
  137.             foreach (ClientData c in _clients)
  138.             {
  139.                 if(c.ID != ID)
  140.                 {
  141.                     c.clientSocket.Send(p.toBytes());
  142.                 }
  143.             }
  144.         }
  145.         public static void SendToAll(Packet p)
  146.         {
  147.             Console.WriteLine("<:: " + p.packetType + " -All");
  148.  
  149.             foreach (ClientData c in _clients)
  150.             {
  151.                 c.clientSocket.Send(p.toBytes());
  152.             }
  153.         }
  154.     }
  155.  
  156.     class ClientData {
  157.         public Thread clientThread;
  158.         public Socket clientSocket;
  159.  
  160.         public string ID;
  161.  
  162.         public float x;
  163.         public float y;
  164.         public int health;
  165.         public int ammo;
  166.         public float gunRotation;
  167.  
  168.         //??? - TODO: figure out animation values?
  169.  
  170.         public ClientData()
  171.         {
  172.             ID = Guid.NewGuid().ToString();
  173.             clientThread = new Thread(Server.Data_IN);
  174.             clientThread.Start(clientSocket);
  175.         }
  176.         public ClientData(Socket _clientSocket)
  177.         {
  178.             ID = Guid.NewGuid().ToString();
  179.             clientSocket = _clientSocket;
  180.             clientThread = new Thread(Server.Data_IN);
  181.             clientThread.Start(clientSocket);
  182.         }
  183.  
  184.         public void SendRegistrationPacket()
  185.         {
  186.             Packet p = new Packet(PacketType.PlayerRegistration, "server", ID);
  187.             clientSocket.Send(p.toBytes());
  188.         }
  189.     }
  190. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top