Networking/WirelessAdapterMode.cs
using GbaCore = Emulotl.Gba.Gba;
using Emulotl.Gba;
namespace Emulotl;
public sealed class WirelessAdapterMode : INetMode
{
private const int HostSlot = 0;
private readonly NetworkManager _net;
private GbaWirelessAdapter _wired;
public WirelessAdapterMode( NetworkManager net )
{
_net = net;
}
private GbaWirelessAdapter Adapter => (_net.Emulator?.Core as GbaCore)?.Io?.WirelessAdapter;
public void OnPeerJoined( Connection conn )
{
if ( conn is not null && conn != Connection.Local && _net.State == SessionState.Solo )
_net.SetState( SessionState.InGame );
}
public void OnPeerLeft( int slot, Connection conn )
{
if ( slot >= 0 )
Adapter?.EnqueueDisconnect( slot );
}
public void OnHostLeft()
{
Adapter?.EnqueueDisconnect( HostSlot );
_net.ClearSessionAfterHostLost();
}
public void OnGameStarted() { }
public void OnPacket( int senderSlot, byte[] payload )
{
Adapter?.EnqueueReceive( senderSlot, payload, payload.Length );
}
public void Tick()
{
var adapter = Adapter;
if ( adapter is null || ReferenceEquals( adapter, _wired ) )
return;
adapter.Network = _net;
_wired = adapter;
}
public void Exit() { }
}