Advertisement
Guest User

Untitled

a guest
Feb 21st, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.31 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.Networking;
  4. using System.Net;
  5. using System.Collections.Generic;
  6. using TanarusNetworkMessages;
  7. using UnityEngine.Networking.NetworkSystem;
  8. public class MasterServer : MonoBehaviour
  9. {
  10.     private IPAddress _ipAddress = null;
  11.     private int _port = 0;
  12.    
  13.     void Start ()
  14.     {
  15.         Debug.Log("Initializing Tanarus Master Server");
  16.         ParseArgs();
  17.         SetIP();
  18.         SetPort();
  19.         StartServer();
  20.         RegisterEvents();
  21.     }
  22.     private void ParseArgs()
  23.     {
  24.         string[] args = System.Environment.GetCommandLineArgs();
  25.         Debug.Log("Command line: " + args);
  26.         for (var i = 0; i < args.Length; i++)
  27.         {
  28.             switch (args[i])
  29.             {
  30.                 case "-ip":
  31.                     if (args.Length == i + 1)
  32.                     {
  33.                         Debug.LogError("IP Address missing from the command line");
  34.                         KillServer();
  35.                     }
  36.                     try
  37.                     {
  38.                         _ipAddress = IPAddress.Parse(args[i + 1]);
  39.                     }
  40.                     catch
  41.                     {
  42.                         Debug.LogError("Invalid IP address specified on the command line");
  43.                         KillServer();
  44.                     }
  45.                     break;
  46.                 case "-port":
  47.                     if (args.Length == i + 1)
  48.                     {
  49.                         Debug.LogError("Port missing from the command line");
  50.                         KillServer();
  51.                     }
  52.                     try
  53.                     {
  54.                         _port = System.Int32.Parse(args[i + 1]);
  55.                     }
  56.                     catch
  57.                     {
  58.                         Debug.LogError("Invalid port specified on the command line");
  59.                         KillServer();
  60.                     }
  61.                     break;
  62.             }
  63.         }
  64.     }
  65.  
  66.     private void SetIP()
  67.     {
  68.         if (_ipAddress == null)
  69.         {
  70. #if UNITY_EDITOR
  71.             _ipAddress = IPAddress.Parse("127.0.0.1");
  72. #else
  73.             IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
  74.             _ipAddress = ipHostInfo.AddressList[0];
  75. #endif
  76.         }
  77.     }
  78.  
  79.     private void SetPort()
  80.     {
  81.         if (_port == 0)
  82.         {
  83.  
  84.             _port = Constants.defaultPort;
  85.         }
  86.     }
  87.  
  88.     private void StartServer()
  89.     {
  90.         try
  91.         {
  92.             if (!NetworkServer.Listen(_ipAddress.ToString(), _port))
  93.             {
  94.                 Debug.LogError("Could not establish connection on " + _ipAddress.ToString() + ":" + _port);
  95.                 KillServer();
  96.             }
  97.             Debug.Log("Server listening on " + _ipAddress.ToString() + ":" + _port);
  98.         }
  99.         catch
  100.         {
  101.             Debug.LogError("Could not establish connection on " + _ipAddress.ToString() + ":" + _port);
  102.             KillServer();
  103.         }
  104.     }
  105.  
  106.     private void RegisterEvents()
  107.     {
  108.         NetworkServer.RegisterHandler(MsgType.Connect, PlayerConnected);
  109.         NetworkServer.RegisterHandler(MessageTypes.CheckServerStatus, ServerStatusRequested);
  110.         NetworkServer.RegisterHandler(MessageTypes.CheckClientVersion, ClientVersionRequested);
  111.         NetworkServer.RegisterHandler(MessageTypes.Login, LoginRequested);
  112.     }
  113.  
  114.     private void PlayerConnected(NetworkMessage msg)
  115.     {
  116.         Debug.Log("Client ID " + msg.conn.connectionId + " connected");
  117.         SendToAllBut(msg.conn, MsgType.Connect, new EmptyMessage());
  118.     }
  119.  
  120.     private void ServerStatusRequested(NetworkMessage msg)
  121.     {
  122.         NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.CheckClientVersion, new CheckServerStatus() { status = "online" });
  123.     }
  124.  
  125.     private void ClientVersionRequested(NetworkMessage msg)
  126.     {
  127.         NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.CheckClientVersion, new CheckClientVersion() { version = Constants.requiredVersion });
  128.     }
  129.  
  130.     private void LoginRequested(NetworkMessage msg)
  131.     {
  132.         Login data = msg.ReadMessage<Login>();
  133.         if (data.username == "gadonj18" && data.password == "Password1!")
  134.         {
  135.             NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.LoginResponse, new LoginResponse() { loginSuccess = true });
  136.         }
  137.         else
  138.         {
  139.             NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.LoginResponse, new LoginResponse() { loginSuccess = false, errorMessage = "Invalid username and/or password" });
  140.         }
  141.     }
  142.  
  143.     private void SendToAllBut(NetworkConnection excludedConn, short msgType, MessageBase msg)
  144.     {
  145.         List<NetworkConnection> clients = new List<NetworkConnection>(NetworkServer.connections);
  146.         clients.Remove(excludedConn);
  147.         if (clients.Count > 0)
  148.         {
  149.             foreach (NetworkConnection conn in clients)
  150.             {
  151.                 if (conn != null)
  152.                 {
  153.                     NetworkServer.SendToClient(conn.connectionId, 1002, msg);
  154.                 }
  155.             }
  156.         }
  157.     }    
  158.  
  159.     void OnApplicationQuit()
  160.     {
  161.         KillServer();
  162.     }
  163.  
  164.     private void KillServer()
  165.     {
  166.         Debug.Log("Server shutting down");
  167.         NetworkServer.Shutdown();
  168.     }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement