/// <summary> /// </summary> /// <param name="network">Networking implementation.</param> /// <param name="persistence">Implementation to relay Persistance packets to.</param> protected ConnectionBase( [NotNull] INetworkConnection network, [NotNull] IGameStatePersistence persistence) { Dispatcher = new PacketDispatcher(); Network = network ?? throw new ArgumentNullException(nameof(network)); GameStatePersistence = persistence ?? throw new ArgumentNullException(nameof(persistence)); }
public ConnectionClient( INetworkConnection network, IGameStatePersistence persistence, ISaveData worldData) : base(network, persistence) { m_WorldData = worldData; m_StateMachine = new StateMachine <EConnectionState, ETrigger>(EConnectionState.Disconnected); m_StateMachine.Configure(EConnectionState.Disconnected) .Permit(ETrigger.TryJoinServer, EConnectionState.ClientJoinRequesting); StateMachine <EConnectionState, ETrigger> .TriggerWithParameters <EDisconnectReason> disconnectTrigger = m_StateMachine.SetTriggerParameters <EDisconnectReason>(ETrigger.Disconnect); m_StateMachine.Configure(EConnectionState.Disconnecting) .OnEntryFrom(disconnectTrigger, closeConnection) .Permit(ETrigger.Disconnected, EConnectionState.Disconnected); m_StateMachine.Configure(EConnectionState.ClientJoinRequesting) .OnEntry(sendClientHello) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting) .PermitIf( ETrigger.ServerAcceptedJoinRequest, EConnectionState.ClientAwaitingWorldData, () => m_WorldData.RequiresInitialWorldData) .PermitIf( ETrigger.ServerAcceptedJoinRequest, EConnectionState.ClientPlaying, () => !m_WorldData.RequiresInitialWorldData); m_StateMachine.Configure(EConnectionState.ClientAwaitingWorldData) .OnEntry(sendClientRequestInitialWorldData) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting) .Permit( ETrigger.InitialWorldDataReceived, EConnectionState.ClientPlaying); m_StateMachine.Configure(EConnectionState.ClientPlaying) .OnEntry(onConnected) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting); Dispatcher.RegisterPacketHandlers(this); }
public ConnectionServer( INetworkConnection network, IGameStatePersistence persistence, ISaveData worldData) : base(network, persistence) { m_WorldData = worldData; m_StateMachine = new StateMachine <EConnectionState, ETrigger>(EConnectionState.Disconnected); m_StateMachine.Configure(EConnectionState.Disconnected) .Permit(ETrigger.WaitForClient, EConnectionState.ServerAwaitingClient); StateMachine <EConnectionState, ETrigger> .TriggerWithParameters <EDisconnectReason> disconnectTrigger = m_StateMachine.SetTriggerParameters <EDisconnectReason>(ETrigger.Disconnect); m_StateMachine.Configure(EConnectionState.Disconnecting) .OnEntryFrom(disconnectTrigger, closeConnection) .Permit(ETrigger.Disconnected, EConnectionState.Disconnected); m_StateMachine.Configure(EConnectionState.ServerAwaitingClient) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting) .Permit(ETrigger.ClientInfoVerified, EConnectionState.ServerJoining); m_StateMachine.Configure(EConnectionState.ServerJoining) .OnEntry(SendJoinRequestAccepted) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting) .Permit( ETrigger.ClientRequestedWorldData, EConnectionState.ServerSendingWorldData) .Permit(ETrigger.ClientJoined, EConnectionState.ServerPlaying); m_StateMachine.Configure(EConnectionState.ServerSendingWorldData) .OnEntry(SendInitialWorldData) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting) .Permit(ETrigger.ClientJoined, EConnectionState.ServerPlaying); m_StateMachine.Configure(EConnectionState.ServerPlaying) .OnEntry(onConnected) .Permit(ETrigger.Disconnect, EConnectionState.Disconnecting); Dispatcher.RegisterPacketHandlers(this); }