Ejemplo n.º 1
0
        public StepProbeResultModel HandleStepProbe(StepProbeDto buildActionDto)
        {
            BuildSessionManager buildSession = GetBuildSessionByMac(buildActionDto.Mac);

            if (buildSession == null)
            {
                throw new NotFoundException("build session");
            }

            StepProbeResultModel result = buildSession.HandleConnectionProbe(buildActionDto);

            if (result.Status == ProbeStatus.FINISHED)
            {
                lock (buildSession)
                {
                    bool buildSessionAlive = BuildSessions.ContainsKey(buildSession.BuildSession.BuildSessionToken);

                    if (!buildSessionAlive)
                    {
                        return(result);
                    }

                    RemoveSessionByUserId(buildSession.UserId);
                    ConcretePartRepo.MarkInUse(buildSession.UsedPartIds);
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public IEnumerable <StepProbeResultModel> GetStepProbeResults(BuildSessionDto buildSession)
        {
            CheckBuildSession(buildSession);
            BuildSessionManager sessionInfo = BuildSessions[buildSession.BuildSessionToken];

            return(sessionInfo.StepProbesResults.ToList());
        }
Ejemplo n.º 3
0
        private void CheckBuildSession(BuildSessionDto buildSession)
        {
            SessionService.CheckSession(buildSession.Session);

            if (!BuildSessions.ContainsKey(buildSession.BuildSessionToken))
            {
                throw new NotFoundException("build session");
            }

            BuildSessionManager sessionInfo = BuildSessions[buildSession.BuildSessionToken];

            if (buildSession.Session.UserId.Value != sessionInfo.UserId)
            {
                throw new NotFoundException("build session");
            }
        }
Ejemplo n.º 4
0
        public IndicatorMapModel HandlePing(ControllerPingDto pingDto)
        {
            BuildSessionManager buildSession = GetBuildSessionByMac(pingDto.Mac);

            if (buildSession == null)
            {
                throw new NotFoundException("build session");
            }

            if (!buildSession.IndicatorMaps.ContainsKey(pingDto.Mac))
            {
                return(new IndicatorMapModel());
            }
            //throw new NotFoundException("indicator map");

            return(buildSession.IndicatorMaps[pingDto.Mac]);
        }
Ejemplo n.º 5
0
        public BuildSessionModel InitBuildSession(StartBuildDto startBuildDto)
        {
            SessionService.CheckSession(startBuildDto.Session);
            FurnitureItemModel furniture = FurnitureRepo.Get(startBuildDto.FurnitureId.Value);

            if (furniture == null)
            {
                throw new NotFoundException("furniture");
            }

            bool canBuild = FurnitureService.CanBuild(startBuildDto.Session, startBuildDto.FurnitureId.Value);

            if (!canBuild)
            {
                throw new NotFoundException("all owned parts");
            }

            int userId = startBuildDto.Session.UserId.Value;

            if (UserBuildTokens.ContainsKey(userId))
            {
                RemoveSessionByUserId(userId);
            }
            //throw new ConflictException("build sessions");

            string token = HashingService.GetHash(Guid.NewGuid().ToString());

            IEnumerable <ConcretePartModel> possiblePartsToUse = ConcretePartRepo
                                                                 .GetOwnedByUser(userId)
                                                                 .Where(part => !part.IsForSell && !part.IsInUse)
                                                                 .ToList();

            BuildSessionManager buildSessionInfo = new BuildSessionManager(
                userId, possiblePartsToUse, furniture,
                new BuildSessionModel(token, furniture.Id)
                );

            UserBuildTokens.Add(userId, token);
            BuildSessions.Add(token, buildSessionInfo);
            return(buildSessionInfo.BuildSession);
        }