void SetupConnections(BackrollConnection[] connections) { for (var i = 0; i < connections.Length; i++) { ref BackrollConnection connection = ref connections[i]; SetupConnection(connection); connection.SetDisconnectTimeout((uint)DEFAULT_DISCONNECT_TIMEOUT); connection.SetDisconnectNotifyStart((uint)DEFAULT_DISCONNECT_NOTIFY_START); connection.Synchronize(); connections[i] = connection; }
BackrollConnection[] InitializeConnections(LobbyMember[] members) { Assert.IsNotNull(members); var connections = new BackrollConnection[members.Length]; for (var i = 0; i < connections.Length; i++) { var connection = new BackrollConnection(members[i], i, _localConnectStatus); connections[i] = connection; } return(connections); }
BackrollConnection[] InitializeConnections(LobbyMember[] members) { Assert.IsNotNull(members); var connections = new BackrollConnection[members.Length]; for (var i = 0; i < connections.Length; i++) { var connection = new BackrollConnection(members[i], i, _localConnectStatus); SetupConnection(connection); connection.SetDisconnectTimeout((uint)DEFAULT_DISCONNECT_TIMEOUT); connection.SetDisconnectNotifyStart((uint)DEFAULT_DISCONNECT_NOTIFY_START); connection.Synchronize(); connections[i] = connection; } return(connections); }
void SetupConnection(BackrollConnection connection) { var member = connection.LobbyMember; var queue = GetIndex(connection.LobbyMember, _players); member.OnDisconnected += () => { if (queue >= 0) { DisconnectPlayer(QueueToPlayerHandle(queue)); } var spectator = GetIndex(member, _spectators); if (spectator >= 0) { _spectators[spectator].Disconnect(); } }; if (queue < 0) { return; } var handle = QueueToPlayerHandle(queue); connection.OnInput += (input) => { if (_localConnectStatus[queue].Disconnected) { return; } int current_remote_frame = _localConnectStatus[queue].LastFrame; int new_remote_frame = input.Frame; Assert.IsTrue(current_remote_frame == -1 || new_remote_frame == (current_remote_frame + 1)); _sync.AddRemoteInput(queue, ref input); // Notify the other endpoints which frame we received from a peer Debug.LogFormat("setting remote connect status for queue {} to {}", queue, new_remote_frame); _localConnectStatus[queue].LastFrame = new_remote_frame; }; connection.OnSynchronizing += (total, count) => { _callbacks.OnPlayerSynchronizing?.Invoke(new PlayerSynchronizingEvent { Player = handle, Total = total, Count = count }); }; connection.OnSynchronized += () => { _callbacks.OnPlayerSynchronized?.Invoke(new PlayerSynchronizedEvent { Player = handle, }); }; connection.OnNetworkInterrupted += (timeout) => { _callbacks.OnConnectionInterrupted?.Invoke(new ConnectionInterruptedEvent { Player = handle, DisconnectTimeout = timeout, }); }; connection.OnNetworkResumed += () => { _callbacks.OnConnectionResumed?.Invoke(new ConnectionResumedEvent { Player = handle }); }; }
public SpectatorBackrollSession(BackrollSessionConfig config) { _callbacks = config.Callbacks; _num_players = config.Players.Length; _next_input_to_send = 0; _synchronizing = true; _inputs = new GameInput[kFrameBufferSize]; for (var i = 0; i < _inputs.Length; i++) { _inputs[i].Frame = -1; } _host = new BackrollConnection(config.Players[0], 0, null); _host.Synchronize(); _host.OnConnected += () => { _callbacks.OnConnected?.Invoke(new ConnectedEvent { Player = new BackrollPlayerHandle { Id = 0 } }); }; _host.OnSynchronizing += (count, total) => { _callbacks.OnPlayerSynchronizing?.Invoke(new PlayerSynchronizingEvent { Player = new BackrollPlayerHandle { Id = 0 }, Count = count, Total = total }); }; _host.OnSynchronized += () => { if (!_synchronizing) { return; } _callbacks.OnPlayerSynchronized?.Invoke(new PlayerSynchronizedEvent { Player = new BackrollPlayerHandle { Id = 0 }, }); _callbacks.OnReady?.Invoke(); _synchronizing = false; }; _host.OnNetworkInterrupted += (disconnectTimeout) => { _callbacks.OnConnectionInterrupted?.Invoke(new ConnectionInterruptedEvent { Player = new BackrollPlayerHandle { Id = 0 }, DisconnectTimeout = disconnectTimeout }); }; _host.OnNetworkResumed += () => { _callbacks.OnConnectionResumed?.Invoke(new ConnectionResumedEvent { Player = new BackrollPlayerHandle { Id = 0 }, }); }; _host.OnDisconnected += () => { _callbacks.OnDisconnected?.Invoke(new DisconnectedEvent { Player = new BackrollPlayerHandle { Id = 0 }, }); }; _host.OnInput += (input) => { _host.SetLocalFrameNumber(input.Frame); _host.SendInputAck(); _inputs[input.Frame % _inputs.Length] = input; }; }