Add disconnect by timeout
This commit is contained in:
parent
02406eab24
commit
b9aacb530b
@ -28,6 +28,14 @@ namespace Network {
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool RemoveConnection(Connection conn) {
|
||||
if (Contains(conn)) {
|
||||
Connections.Remove(conn);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Contains(Connection conn) {
|
||||
for (int i = 0; i < Connections.Count; i++) {
|
||||
Connection inList = Connections[i];
|
||||
|
@ -8,6 +8,8 @@ using Thread = System.Threading.Thread;
|
||||
namespace Network {
|
||||
public abstract class Peer : Object {
|
||||
|
||||
public const float TIMEOUT = 4f; // 4 seconds
|
||||
|
||||
private static PacketPeerUDP PacketPeer;
|
||||
private static Peer Singleton;
|
||||
public readonly bool IsServer;
|
||||
@ -26,7 +28,7 @@ namespace Network {
|
||||
IsServer = isServer;
|
||||
Protocol = new Protocol(this);
|
||||
ConnectionList = new ConnectionList(this);
|
||||
PacketDistributor = new PacketDistributor(this, 2);
|
||||
PacketDistributor = new PacketDistributor(this, 0.5f);
|
||||
}
|
||||
|
||||
public void Update(float delta) {
|
||||
@ -37,6 +39,7 @@ namespace Network {
|
||||
public abstract void Initialize(string address, int port);
|
||||
public abstract void Process(float delta);
|
||||
public abstract void Connected(Connection conn);
|
||||
public abstract void Disconnected(Connection conn);
|
||||
|
||||
public void SendBuffer(PacketBuffer packetBuffer, Connection to) {
|
||||
if (LastConnectionSended != to.ID) {
|
||||
@ -44,6 +47,7 @@ namespace Network {
|
||||
LastConnectionSended = to.ID;
|
||||
}
|
||||
PacketPeer.PutPacket(packetBuffer.ByteBuffer);
|
||||
GD.print("Sent PacketBuffer with size " + packetBuffer.ByteBuffer.Length + " bytes.");
|
||||
}
|
||||
|
||||
public bool StartListening(int port, string address = "*") {
|
||||
@ -93,5 +97,22 @@ namespace Network {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Disconnect(Connection conn, DisconnectReason reason) {
|
||||
GD.print(conn + " disconnected. Reason:");
|
||||
switch (reason) {
|
||||
case DisconnectReason.TIMEOUT: {
|
||||
GD.print("TIMEOUT");
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
GD.print("Unknown.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ConnectionList.RemoveConnection(conn);
|
||||
PacketDistributor.RemoveHandler(conn);
|
||||
}
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ using Godot;
|
||||
using Network.PacketHandling;
|
||||
using Network.PacketHandling.Packets;
|
||||
using System.Collections.Generic;
|
||||
using Util;
|
||||
|
||||
namespace Network.Syncing {
|
||||
public class ConnectionHandler {
|
||||
@ -26,6 +27,13 @@ namespace Network.Syncing {
|
||||
Connection = connection;
|
||||
}
|
||||
|
||||
public void Update(float delta) {
|
||||
TimeSinceLastPacket += delta;
|
||||
if (TimeSinceLastPacket > Peer.TIMEOUT) {
|
||||
Peer.Disconnect(Connection, DisconnectReason.TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
public void SerializeAndSendQueues(int UnreliableSyncID) {
|
||||
PacketBuffer Buffer = PacketBuffer.WithSignature();
|
||||
|
||||
@ -59,6 +67,8 @@ namespace Network.Syncing {
|
||||
}
|
||||
|
||||
public void ReceiveBuffer(PacketBuffer packetBuffer) {
|
||||
TimeSinceLastPacket = 0;
|
||||
|
||||
SyncPkt Sync = new SyncPkt();
|
||||
Sync.Deserialize(packetBuffer);
|
||||
|
||||
|
@ -31,6 +31,10 @@ namespace Network.Syncing {
|
||||
Handler.SerializeAndSendQueues(UnreliableIDCounter++);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ConnectionHandler Handler in HandlerList.ToArray()) {
|
||||
Handler.Update(delta);
|
||||
}
|
||||
}
|
||||
|
||||
public void HandleRawPacket(PacketBuffer packetBuffer, Connection connection) {
|
||||
@ -47,6 +51,13 @@ namespace Network.Syncing {
|
||||
HandlerList.Add(Handler);
|
||||
}
|
||||
|
||||
public void RemoveHandler(Connection connection) {
|
||||
Optional<ConnectionHandler> Handler = GetHandlerFor(connection);
|
||||
if (Handler.HasValue) {
|
||||
HandlerList.Remove(Handler);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddReliableFor(Connection connection, Serializable serializable) {
|
||||
var ConnHandlerOpt = GetHandlerFor(connection);
|
||||
if (ConnHandlerOpt.HasValue) {
|
||||
|
6
scripts/util/DisconnectReason.cs
Normal file
6
scripts/util/DisconnectReason.cs
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
namespace Util {
|
||||
public enum DisconnectReason {
|
||||
TIMEOUT
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user