Ejemplo n.º 1
0
        private void BroadcastPingRequest()
        {
            // Do not use Broadcast - create new ping response for every user
            foreach (var conn in _connections)
            {
                if (conn.IsRegistered)
                {
                    var now = DateTime.Now.ToUniversalTime();

                    // Only send ping if last pong was received
                    if (conn.User.LastPongReceived == null || conn.User.LastPongReceived.GetValueOrDefault() > conn.User.LastPingSent)
                    {
                        var response = SyncCommandHelper.Ping();
                        conn.User.LastPingSent = now;
                        conn.Context.Send(response.ToString());
                    }
                    else
                    {
                        // No ping received yet - set max ping
                        conn.User.Ping = 1000;
                    }
                }
            }

            this.BroadcastUserlist();
        }
Ejemplo n.º 2
0
        private void UpdateLiveStatus(bool live)
        {
            if (SyncManager.Instance.Status == SyncManager.ConnectionStatus.Connected &&
                SyncManager.Instance.User != null)
            {
                var  id            = SyncManager.Instance.UserId;
                bool?currentlyLive = null;

                if (SyncManager.Instance.State.LiveStatus.ContainsKey(id))
                {
                    currentlyLive = SyncManager.Instance.State.LiveStatus[id];
                }

                if (currentlyLive == null || currentlyLive.Value != live)
                {
                    // Changed live status, update
                    var user = SyncManager.Instance.FindUser(id);
                    if (user != null)
                    {
                        user.IsLive = live;
                    }
                    SyncManager.Instance.State.LiveStatus[id] = live;

                    // Send to server
                    SyncManager.Instance.SendStateUpdate(SyncCommandHelper.UpdateLiveStatus(live));
                }
            }
        }
Ejemplo n.º 3
0
        private void UpdateWatchedDriver(int carId)
        {
            if (SyncManager.Instance.Status == SyncManager.ConnectionStatus.Connected &&
                SyncManager.Instance.User != null)
            {
                var id        = SyncManager.Instance.UserId;
                int?currentId = null;

                if (SyncManager.Instance.State.WatchedDrivers.ContainsKey(id))
                {
                    currentId = SyncManager.Instance.State.WatchedDrivers[id];
                }

                if (currentId == null || currentId.Value != carId)
                {
                    // Changed camera, update state
                    var user = SyncManager.Instance.FindUser(id);
                    if (user != null)
                    {
                        var driver = this.Drivers.FromId(carId);
                        if (driver != null)
                        {
                            driver.UserCameras.Add(user);
                        }
                    }
                    SyncManager.Instance.State.WatchedDrivers[id] = carId;

                    // Send to server
                    SyncManager.Instance.SendStateUpdate(SyncCommandHelper.UpdateWatchedDriver(carId));
                }
            }
        }
        public void AddEvent(ReplayEvent @event)
        {
            var container = new ReplayEventContainer(@event);

            container.RelativePosition = @event.Camera.SessionTime / this.SessionTime;
            this.Events.Add(container);
            this.UpdateEventPosition(container);

            var command = SyncCommandHelper.AddEvent(@event);

            SyncManager.Instance.SendStateUpdate(command);
        }
        public static void ProposeSyncCamera(User user)
        {
            // Sync this user's camera with me
            if (!Simulator.Instance.Sdk.IsConnected)
            {
                return;
            }

            //var camera = GetCurrentCameraReplay();
            var camera = GetCurrentCameraSessionTime();

            var users = new List <User>();

            users.Add(user);

            var command = SyncCommandHelper.ProposeSyncCameras(users, camera);

            SyncManager.Instance.SendCommand(command);
        }
Ejemplo n.º 6
0
        public void AddOfftrackPenalty(DriverOfftrackLimit limit)
        {
            Penalty penalty;

            penalty        = Penalty.Create();
            penalty.Reason = "Ignoring track limits";
            penalty.Camera = CameraControl.GetCurrentCameraSessionTime();
            penalty.Lap    = limit.Driver.Driver.Live.Lap.ToString();
            SyncManager.Instance.State.Penalties.Add(penalty);

            // Create incident event
            var @event = new ReplayEvent();

            @event.Type    = ReplayEvent.EventTypes.Incident;
            @event.AdminId = SyncManager.Instance.UserId;
            @event.Camera  = penalty.Camera;
            // _mainModel.ReplayBarModel.AddEvent(@event);

            penalty.StartInvestigation(limit.Driver.Driver.Id, SyncManager.Instance.User);

            SyncManager.Instance.SendStateUpdate(SyncCommandHelper.AddPenalty(penalty));
        }
Ejemplo n.º 7
0
        public void AddDriver(DriverContainer driver, PenaltyContainer parentPenalty = null)
        {
            Penalty penalty;

            if (parentPenalty == null)
            {
                penalty        = Penalty.Create();
                penalty.Camera = CameraControl.GetCurrentCameraSessionTime();
                penalty.Lap    = driver.Driver.Live.Lap.ToString();
                SyncManager.Instance.State.Penalties.Add(penalty);

                // Create incident event
                var @event = new ReplayEvent();
                @event.Type    = ReplayEvent.EventTypes.Incident;
                @event.AdminId = SyncManager.Instance.UserId;
                @event.Camera  = penalty.Camera;
                //_mainModel.ReplayBarModel.AddEvent(@event);
            }
            else
            {
                penalty = parentPenalty.Penalty;
            }

            penalty.StartInvestigation(driver.Driver.Id, SyncManager.Instance.User);

            if (parentPenalty == null)
            {
                SyncManager.Instance.SendStateUpdate(SyncCommandHelper.AddPenalty(penalty));
                EditPenalty(penalty);
            }
            else
            {
                SyncManager.Instance.SendPenaltyUpdate(penalty);
            }

            this.UpdatePenalties();
        }