Add Codedump

Description (Markdown supported)
Title or filename
Language
Codeusing BeardedManStudios.Forge.Networking; using BeardedManStudios.Forge.Networking.Unity; using BeardedManStudios.Forge.Networking.Lobby; using BeardedManStudios.SimpleJSON; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LobbyMenu : MonoBehaviour { public string ipAddress = "127.0.0.1"; public string portNumber = "15937"; public bool DontChangeSceneOnConnect = false; public string masterServerHost = string.Empty; public ushort masterServerPort = 15940; public string natServerHost = string.Empty; public ushort natServerPort = 15941; public bool connectUsingMatchmaking = false; public bool useElo = false; public int myElo = 0; public int eloRequired = 0; public GameObject networkManager = null; public GameObject[] ToggledButtons; private NetworkManager mgr = null; private List<Button> _uiButtons = new List<Button>(); private bool _matchmaking = false; public bool useMainThreadManagerForRPCs = true; public bool useInlineChat = false; public bool getLocalNetworkConnections = false; public bool useTCP = true; private void Start() { if (!useTCP) { // Do any firewall opening requests on the operating system NetWorker.PingForFirewall(ushort.Parse(portNumber)); } if (useMainThreadManagerForRPCs) Rpc.MainThreadRunner = MainThreadManager.Instance; if (getLocalNetworkConnections) { NetWorker.localServerLocated += LocalServerLocated; NetWorker.RefreshLocalUdpListings(ushort.Parse(portNumber)); } } private void LocalServerLocated(NetWorker.BroadcastEndpoints endpoint, NetWorker sender) { Debug.Log("Found endpoint: " + endpoint.Address + ":" + endpoint.Port); } public void Connect() { if (connectUsingMatchmaking) { ConnectToMatchmaking(); return; } ushort port; if (!ushort.TryParse(portNumber, out port)) { Debug.LogError("The supplied port number is not within the allowed range 0-" + ushort.MaxValue); return; } NetWorker client; if (useTCP) { client = new TCPClient(); ((TCPClient)client).Connect(ipAddress, port); } else { client = new UDPClient(); if (natServerHost.Trim().Length == 0) ((UDPClient)client).Connect(ipAddress, port); else ((UDPClient)client).Connect(ipAddress, port, natServerHost, natServerPort); } Debug.Log("Trying to connect to " + ipAddress + ":" + port); Connected(client); } public void ConnectToMatchmaking() { if (_matchmaking) return; SetToggledButtons(false); _matchmaking = true; if (mgr == null && networkManager == null) throw new System.Exception("A network manager was not provided, this is required for the tons of fancy stuff"); mgr = Instantiate(networkManager).GetComponent<NetworkManager>(); mgr.MatchmakingServersFromMasterServer(masterServerHost, masterServerPort, myElo, (response) => { _matchmaking = false; SetToggledButtons(true); Debug.LogFormat("Matching Server(s) count[{0}]", response.serverResponse.Count); //TODO: YOUR OWN MATCHMAKING EXTRA LOGIC HERE! // I just make it randomly pick a server... you can do whatever you please! if (response != null && response.serverResponse.Count > 0) { MasterServerResponse.Server server = response.serverResponse[Random.Range(0, response.serverResponse.Count)]; //TCPClient client = new TCPClient(); UDPClient client = new UDPClient(); client.Connect(server.Address, server.Port); Connected(client); } }); } public void Host() { NetWorker server; if (useTCP) { server = new TCPServer(64); ((TCPServer)server).Connect(); } else { server = new UDPServer(64); if (natServerHost.Trim().Length == 0) ((UDPServer)server).Connect(ipAddress, ushort.Parse(portNumber)); else ((UDPServer)server).Connect(natHost: natServerHost, natPort: natServerPort); } server.playerTimeout += (player, sender) => { Debug.Log("Player " + player.NetworkId + " timed out"); }; //LobbyService.Instance.Initialize(server); Connected(server); } private void Update() { if (Input.GetKeyDown(KeyCode.H)) Host(); else if (Input.GetKeyDown(KeyCode.C)) Connect(); else if (Input.GetKeyDown(KeyCode.L)) { NetWorker.localServerLocated -= TestLocalServerFind; NetWorker.localServerLocated += TestLocalServerFind; NetWorker.RefreshLocalUdpListings(); } if (NetworkManager.Instance != null && NetworkManager.Instance.Networker != null) { Debug.Log("NetworkObjects.Count :" + NetworkManager.Instance.Networker.Players.Count); if (NetworkManager.Instance.Networker.Players.Count > 1 && NetworkManager.Instance.Networker.IsServer) { SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); } } } private void TestLocalServerFind(NetWorker.BroadcastEndpoints endpoint, NetWorker sender) { Debug.Log("Address: " + endpoint.Address + ", Port: " + endpoint.Port + ", Server? " + endpoint.IsServer); } public void Connected(NetWorker networker) { if (!networker.IsBound) { Debug.LogError("NetWorker failed to bind"); return; } if (mgr == null && networkManager == null) { Debug.LogWarning("A network manager was not provided, generating a new one instead"); networkManager = new GameObject("Network Manager"); mgr = networkManager.AddComponent<NetworkManager>(); } else if (mgr == null) mgr = Instantiate(networkManager).GetComponent<NetworkManager>(); // If we are using the master server we need to get the registration data JSONNode masterServerData = null; if (!string.IsNullOrEmpty(masterServerHost)) { string serverId = "myGame"; string serverName = "Forge Game"; string type = "Deathmatch"; string mode = "Teams"; string comment = "Demo comment..."; masterServerData = mgr.MasterServerRegisterData(networker, serverId, serverName, type, mode, comment, useElo, eloRequired); } mgr.Initialize(networker, masterServerHost, masterServerPort, masterServerData); if (useInlineChat && networker.IsServer) SceneManager.sceneLoaded += CreateInlineChat; Debug.Log("Presumably connected"); if (networker is IServer) { if (!DontChangeSceneOnConnect) SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); else NetworkObject.Flush(networker); //Called because we are already in the correct scene! } } private void CreateInlineChat(Scene arg0, LoadSceneMode arg1) { SceneManager.sceneLoaded -= CreateInlineChat; var chat = NetworkManager.Instance.InstantiateChatManager(); DontDestroyOnLoad(chat.gameObject); } private void SetToggledButtons(bool value) { for (int i = 0; i < _uiButtons.Count; ++i) _uiButtons[i].interactable = value; } private void OnApplicationQuit() { if (getLocalNetworkConnections) NetWorker.EndSession(); } }

Access