namespace Sandbox.Network;
///
/// A mock channel. Allows passing this to RPCs when they're being called locally.
///
internal class LocalConnection : Connection
{
public override string Address => "local";
public override string Name => "local";
public override bool IsHost => Networking.System?.IsHost ?? true;
internal override void InternalClose( int closeCode, string closeReason ) { }
internal override void InternalRecv( NetworkSystem.MessageHandler handler ) { }
internal override void InternalSend( ByteStream stream, NetFlags flags ) { }
public LocalConnection( Guid id )
{
Id = id;
}
}
///
/// A mock channel. Allows passing this to RPCs when they're being called locally. Mock connections
/// will also exist for other clients when connected to a dedicated server. If we try to send a message
/// to one, we'll route that message through the server instead.
///
internal class MockConnection : Connection
{
public override string Address => "";
public override string Name => $"{Id}";
public override bool IsHost => false;
internal override void InternalClose( int closeCode, string closeReason ) { }
internal override void InternalRecv( NetworkSystem.MessageHandler handler ) { }
internal override void InternalSend( ByteStream stream, NetFlags flags ) { }
internal override void SendRawMessage( ByteStream stream, NetFlags flags = NetFlags.Reliable )
{
// If we're a mock connection - we don't have a direct connection. We're probably
// on a dedicated server, so let's route through the host.
var availableHost = Host;
if ( availableHost is null or MockConnection )
{
if ( Networking.Debug )
{
Log.Warning( "MockConnection.SendRawMessage: no available host to route through!" );
}
return;
}
var wrapper = new TargetedMessage
{
SenderId = Local.Id,
TargetId = Id,
Message = stream.ToArray(),
Flags = (byte)flags
};
availableHost.SendMessage( wrapper, flags );
}
public MockConnection( Guid id )
{
Id = id;
}
}