Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using UnityEngine.Networking;
- using System.Net;
- using System.Collections.Generic;
- using TanarusNetworkMessages;
- using UnityEngine.Networking.NetworkSystem;
- public class MasterServer : MonoBehaviour
- {
- private IPAddress _ipAddress = null;
- private int _port = 0;
- void Start ()
- {
- Debug.Log("Initializing Tanarus Master Server");
- ParseArgs();
- SetIP();
- SetPort();
- StartServer();
- RegisterEvents();
- }
- private void RegisterEvents()
- {
- NetworkServer.RegisterHandler(MsgType.Connect, PlayerConnected);
- NetworkServer.RegisterHandler(MessageTypes.CheckServerStatus, ServerStatusRequested);
- NetworkServer.RegisterHandler(MessageTypes.CheckClientVersion, ClientVersionRequested);
- NetworkServer.RegisterHandler(MessageTypes.Login, LoginRequested);
- }
- private void PlayerConnected(NetworkMessage msg)
- {
- Debug.Log("Client ID " + msg.conn.connectionId + " connected");
- SendToAllBut(msg.conn, MsgType.Connect, new EmptyMessage());
- }
- private void ServerStatusRequested(NetworkMessage msg)
- {
- NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.CheckClientVersion, new CheckServerStatus() { status = "online" });
- }
- private void ClientVersionRequested(NetworkMessage msg)
- {
- NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.CheckClientVersion, new CheckClientVersion() { version = Constants.requiredVersion });
- }
- private void LoginRequested(NetworkMessage msg)
- {
- Login data = msg.ReadMessage<Login>();
- if (data.username == "gadonj18" && data.password == "Password1!")
- {
- NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.LoginResponse, new LoginResponse() { loginSuccess = true });
- }
- else
- {
- NetworkServer.SendToClient(msg.conn.connectionId, MessageTypes.LoginResponse, new LoginResponse() { loginSuccess = false, errorMessage = "Invalid username and/or password" });
- }
- }
- private void SendToAllBut(NetworkConnection excludedConn, short msgType, MessageBase msg)
- {
- List<NetworkConnection> clients = new List<NetworkConnection>(NetworkServer.connections);
- clients.Remove(excludedConn);
- if (clients.Count > 0)
- {
- foreach (NetworkConnection conn in clients)
- {
- if (conn != null)
- {
- NetworkServer.SendToClient(conn.connectionId, 1002, msg);
- }
- }
- }
- }
- private void StartServer()
- {
- try
- {
- if (!NetworkServer.Listen(_ipAddress.ToString(), _port))
- {
- Debug.LogError("Could not establish connection on " + _ipAddress.ToString() + ":" + _port);
- KillServer();
- }
- Debug.Log("Server listening on " + _ipAddress.ToString() + ":" + _port);
- }
- catch
- {
- Debug.LogError("Could not establish connection on " + _ipAddress.ToString() + ":" + _port);
- KillServer();
- }
- }
- private void ParseArgs()
- {
- string[] args = System.Environment.GetCommandLineArgs();
- Debug.Log("Command line: " + args);
- for (var i = 0; i < args.Length; i++)
- {
- switch (args[i])
- {
- case "-ip":
- if (args.Length == i + 1)
- {
- Debug.LogError("IP Address missing from the command line");
- KillServer();
- }
- try
- {
- _ipAddress = IPAddress.Parse(args[i + 1]);
- }
- catch
- {
- Debug.LogError("Invalid IP address specified on the command line");
- KillServer();
- }
- break;
- case "-port":
- if (args.Length == i + 1)
- {
- Debug.LogError("Port missing from the command line");
- KillServer();
- }
- try
- {
- _port = System.Int32.Parse(args[i + 1]);
- }
- catch
- {
- Debug.LogError("Invalid port specified on the command line");
- KillServer();
- }
- break;
- }
- }
- }
- private void SetIP()
- {
- if (_ipAddress == null)
- {
- #if UNITY_EDITOR
- _ipAddress = IPAddress.Parse("127.0.0.1");
- #else
- IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
- _ipAddress = ipHostInfo.AddressList[0];
- #endif
- }
- }
- private void SetPort()
- {
- if (_port == 0)
- {
- _port = Constants.defaultPort;
- }
- }
- void OnApplicationQuit()
- {
- KillServer();
- }
- private void KillServer()
- {
- Debug.Log("Server shutting down");
- NetworkServer.Shutdown();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement