Files
Nitrox/NitroxClient/Communication/MultiplayerSession/ConnectionState/SessionReserved.cs
2025-07-06 00:23:46 +02:00

52 lines
1.9 KiB
C#

using System;
using NitroxClient.Communication.Abstract;
using NitroxModel.Packets;
namespace NitroxClient.Communication.MultiplayerSession.ConnectionState
{
public class SessionReserved : ConnectionNegotiatedState
{
public override MultiplayerSessionConnectionStage CurrentStage => MultiplayerSessionConnectionStage.SESSION_RESERVED;
public override void JoinSession(IMultiplayerSessionConnectionContext sessionConnectionContext)
{
try
{
ValidateState(sessionConnectionContext);
EnterMultiplayerSession(sessionConnectionContext);
ChangeState(sessionConnectionContext);
}
catch (Exception)
{
Disconnect(sessionConnectionContext);
throw;
}
}
private static void ValidateState(IMultiplayerSessionConnectionContext sessionConnectionContext)
{
if (!sessionConnectionContext.Client.IsConnected)
{
throw new InvalidOperationException("The client is not connected.");
}
}
private void EnterMultiplayerSession(IMultiplayerSessionConnectionContext sessionConnectionContext)
{
IClient client = sessionConnectionContext.Client;
MultiplayerSessionReservation reservation = sessionConnectionContext.Reservation;
string correlationId = reservation.CorrelationId;
string reservationKey = reservation.ReservationKey;
PlayerJoiningMultiplayerSession packet = new PlayerJoiningMultiplayerSession(correlationId, reservationKey);
client.Send(packet);
}
private void ChangeState(IMultiplayerSessionConnectionContext sessionConnectionContext)
{
SessionJoined nextState = new SessionJoined();
sessionConnectionContext.UpdateConnectionState(nextState);
}
}
}