first commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user