91 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
} |