Files
RAGECOOP-V/Core/Networking/CoopPeer.cs

76 lines
2.5 KiB
C#
Raw Normal View History

2022-10-23 19:02:39 +08:00
using System;
2022-08-11 16:25:38 +08:00
using System.Collections.Generic;
using System.Threading;
2022-10-23 19:02:39 +08:00
using Lidgren.Network;
2022-08-11 16:25:38 +08:00
namespace RageCoop.Core
{
2022-09-08 12:41:56 -07:00
internal class CoopPeer : NetPeer, IDisposable
2022-08-11 16:25:38 +08:00
{
2023-02-13 20:44:50 +08:00
private readonly Logger Log;
private readonly Thread _receiver;
2022-10-23 19:02:39 +08:00
private bool _stopping;
public EventHandler<NetIncomingMessage> OnMessageReceived;
2023-02-13 20:44:50 +08:00
public CoopPeer(NetPeerConfiguration config,Logger logger) : base(config)
2022-08-11 16:25:38 +08:00
{
2023-02-13 20:44:50 +08:00
Log = logger;
2022-08-11 16:25:38 +08:00
Start();
NetIncomingMessage msg;
2023-02-13 20:44:50 +08:00
_receiver = new Thread(() =>
2022-10-23 19:02:39 +08:00
{
while (!_stopping)
{
msg = WaitMessage(200);
if (msg != null) OnMessageReceived?.Invoke(this, msg);
}
});
2023-02-13 20:44:50 +08:00
_receiver.Start();
2022-08-11 16:25:38 +08:00
}
/// <summary>
2022-10-23 19:02:39 +08:00
/// Terminate all connections and background thread
2022-08-11 16:25:38 +08:00
/// </summary>
public void Dispose()
{
2022-09-08 12:41:56 -07:00
_stopping = true;
2023-02-13 20:44:50 +08:00
if (Status == NetPeerStatus.Running)
{
Shutdown("Bye!");
}
if (_receiver.IsAlive)
{
Log?.Debug("Stopping message thread");
_receiver.Join();
}
Log?.Debug("Stopping network thread");
2023-02-03 13:30:37 +08:00
Join();
2023-02-13 20:44:50 +08:00
Log?.Debug("CoopPeer disposed");
2022-08-11 16:25:38 +08:00
}
2022-10-23 19:02:39 +08:00
public void SendTo(Packet p, NetConnection connection, ConnectionChannel channel = ConnectionChannel.Default,
NetDeliveryMethod method = NetDeliveryMethod.UnreliableSequenced)
2022-08-11 16:25:38 +08:00
{
2022-10-23 19:02:39 +08:00
var outgoingMessage = CreateMessage();
2022-08-11 16:25:38 +08:00
p.Pack(outgoingMessage);
SendMessage(outgoingMessage, connection, method, (int)channel);
}
2022-10-23 19:02:39 +08:00
public void SendTo(Packet p, IList<NetConnection> connections,
ConnectionChannel channel = ConnectionChannel.Default,
NetDeliveryMethod method = NetDeliveryMethod.UnreliableSequenced)
{
var outgoingMessage = CreateMessage();
2022-08-11 16:25:38 +08:00
p.Pack(outgoingMessage);
SendMessage(outgoingMessage, connections, method, (int)channel);
}
2022-10-23 19:02:39 +08:00
public void Send(Packet p, IList<NetConnection> cons, ConnectionChannel channel = ConnectionChannel.Default,
NetDeliveryMethod method = NetDeliveryMethod.UnreliableSequenced)
2022-08-11 16:25:38 +08:00
{
2022-10-23 19:02:39 +08:00
var outgoingMessage = CreateMessage();
2022-08-11 16:25:38 +08:00
p.Pack(outgoingMessage);
SendMessage(outgoingMessage, cons, method, (int)channel);
}
}
2022-10-23 19:02:39 +08:00
}