This repository has been archived on 2023-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
dungeon-crawler-demo/scripts/Network/Server.cs

91 lines
2.5 KiB
C#

using Godot;
using Network.Data;
using System;
namespace Network
{
public class Network : Node, INetworkObject
{
public static Network main;
public static SceneTree tree;
public int port { get; }
public int max_players { get; set; }
public NetworkedMultiplayerENet peer { get; set; }
//public PlayerData[] playerData;
public Network(SceneTree _tree, int _port = 7777)
{
port = _port;
tree = _tree;
}
public void StartServer(int _max_players = 32)
{
max_players = _max_players;
peer = new NetworkedMultiplayerENet();
peer.CreateServer(port, max_players);
tree.NetworkPeer = peer;
if(tree.NetworkPeer != null)
{
GD.Print("Successfully started server!");
} else {
throw new Exception("Failed to start server!");
}
main = this;
//Intialize signal connects
tree.Connect("network_peer_connected", this, "NetworkPeerConnected");
tree.Connect("network_peer_disconnected", this, "NetworkPeerDisconnected");
}
public void StartClient(string host = "127.0.0.1")
{
peer = new NetworkedMultiplayerENet();
peer.CreateClient(host, port);
tree.NetworkPeer = peer;
main = this;
//Intialize signal connects
tree.Connect("connected_to_server", this, "ConnectedToServer");
tree.Connect("connection_failed", this, "ConnectionFailed");
tree.Connect("server_disconnected", this, "ServerDisconnected");
}
public void NetworkPeerConnected(int id)
{
GD.Print("Player connected to the server!");
}
public void NetworkPeerDisconnected(int id)
{
GD.Print("Player left the server!");
}
public void ConnectedToServer()
{
GD.Print("Connected to server!");
Rpc("RegisterPlayer", "Fred");
}
public void ConnectionFailed()
{
GD.Print("Failed to connect to server!");
}
public void ServerDisconnected()
{
GD.Print("Server disconnected!");
}
[Remote]
public void RegisterPlayer(string name)
{
GD.Print($"Loaded {name}");
}
public void Close()
{
tree.NetworkPeer = null;
}
}
}