Advertisement
Guest User

Untitled

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