Exemplo n.º 1
0
        public TabTaskOut SetTaskItem(UserTaskDataModel newTaskItem)
        {
            if (newTaskItem.Id == 0)
            {
                throw new Exception(Error.TaskNotExist);
            }
            var si = new SpriteImages();
            var ti = new TabTaskOut {
                Id               = newTaskItem.Id,
                StartTime        = newTaskItem.DateActivate,
                SourceOwnType    = newTaskItem.SourceOwnType,
                SourceOwnName    = newTaskItem.SourceOwnName,
                SourceSystemName = newTaskItem.SourceSystemName,
                TargetPlanetName = newTaskItem.TargetPlanetName,

                //TargetSystemName = targetPlanetName.Substring(0, 5),
                TargetSystemName = newTaskItem.TargetSystemName,
                FlyDuration      = newTaskItem.Duration,
                HangarInTask     = UnitList.ConvertToHangar(newTaskItem.SourceFleet.CloneDeep()),
                IsAtack          = newTaskItem.IsAtack,
                IsTransfer       = newTaskItem.IsTransfer
            };

            if (ti.SourceOwnType)
            {
                ti.LeftImage = ImageView.Img("t-LeftImage");
            }
            else
            {
                ti.LeftImage = ImageView.Img(si.MapControlIcons("jumptomother").Icon);
            }
            ti.RightImage = ImageView.Img(si.MapControlIcons("jumptoplanetoid").Icon);
            TabTaskOut.InitComplexBtnItem(ti);
            return(ti);
        }
Exemplo n.º 2
0
        private TabTaskOut _setTaskItem(UserTaskDataModel newTaskItem)
        {
            if (newTaskItem.Id == 0)
            {
                throw new Exception(Error.TaskNotExist);
            }
            var ti = _uTaskService.SetTaskItem(newTaskItem);

            return((TabTaskOut)ti);
        }
Exemplo n.º 3
0
        private UserTaskDataModel _createTaskModelToUser(IDbConnection connection, GDetailPlanetDataModel targetPlanet)
        {
            //return new UserTaskDataModel();

            //tmp
            var targeFleet = _createSkagryFleet(targetPlanet.Hangar, 0.3);



            var targetPlanetGeometry = _geometryPlanetService.GetGeometryPlanetById(connection, targetPlanet.Id);
            var targetPlanetSystem   =
                _systemService.GetDetailSystemBySystemId(connection, targetPlanetGeometry.SystemId);
            var minTime     = SKAGRY_FLY_TYME_SECOND;
            var maxTime     = minTime * 2;
            var duration    = _rand.Next(minTime, maxTime);
            var newTaskItem = new UserTaskDataModel
            {
                SourceTypeId       = 20,
                SourceOwnType      = false,
                SourceOwnName      = Npc.SkagyName,
                SourceUserId       = Npc.SkagryGameUserId,
                SourceOwnId        = 0,
                TargetPlanetName   = targetPlanet.Name,
                DateActivate       = UnixTime.UtcNow(),
                Duration           = duration,
                SourceFleet        = targeFleet, // targeFleet, // targetPlanet.Hangar.CloneDeep(),
                IsAtack            = true,
                IsTransfer         = false,
                TargetPlanetId     = targetPlanet.Id,
                TargetPlanetTypeId = targetPlanetGeometry.TypeId,
                TargetSystemName   = targetPlanetSystem.Name,
                SourceSystemName   = "Unknown",
                Canselation        = false,
                TaskEnd            = false
            };
            // todo save to db new Task Item
            var dataTask = _taskService.AddOrUpdate(connection, newTaskItem);

            return(dataTask);
        }
Exemplo n.º 4
0
 public UserTaskDataModel SetUpdateInProgress(IDbConnection connection, UserTaskDataModel taskItem)
 {
     return(_uTaskCache.SetUpdateInProgress(connection, taskItem));
 }
Exemplo n.º 5
0
 public TabTaskOut SetTaskItem(UserTaskDataModel newTaskItem)
 {
     return(_journalOut.SetTaskItem(newTaskItem));
 }
Exemplo n.º 6
0
        public UserTaskDataModel AddOrUpdate(IDbConnection connection, UserTaskDataModel dataModel)
        {
            var db = _userTaskRepo.AddOrUpdateeModel(connection, dataModel);

            return(_uTaskCache.UpdateLocalItem(connection, db));
        }
Exemplo n.º 7
0
        public void NotyfyTaskFinished(UserTaskDataModel finishedTask, UserReportDataModel report = null, int?newTotalWinnerUserCc = null)
        {
            IDbConnection connection = null; // коннекшен для этого метода не нужен, это часть интерфейса

            if (!finishedTask.TaskEnd)
            {
                throw new NotImplementedException("NotyfyTaskFinished: finishedTask.TaskEnd = false");
            }
            IList <ConnectionUser> hubUsers;

            if (finishedTask.IsTransfer)
            {
                hubUsers = _hubCache.LocalFind(connection, (key, val) => val.UserId == finishedTask.SourceUserId);
                if (hubUsers == null || hubUsers.Count != 1 || !hubUsers[0].Connected)
                {
                    return;
                }
                _hub.Clients.Client(hubUsers[0].ConnectionId).InvokeAsync("journalOnTaskFinished", new
                {
                    Task         = finishedTask,
                    TabReportOut = 0
                });
                return;
            }
            if (report == null)
            {
                return;
            }

            hubUsers = _hubCache.LocalFind(connection, (key, val) =>
                                           val.UserId == report.AtackerUserId || val.UserId == report.DefenderUserId);
            if (hubUsers == null || hubUsers.All(i => !i.Connected))
            {
                return;
            }
            var            atakerUsers   = hubUsers.Where(i => i.UserId == report.AtackerUserId).ToList();
            var            defendorUsers = hubUsers.Where(i => i.UserId == report.DefenderUserId).ToList();
            ConnectionUser ataker        = null;
            ConnectionUser defendor      = null;

            if (atakerUsers.Any() && atakerUsers.Count == 1 && atakerUsers[0].Connected)
            {
                ataker = atakerUsers[0];
            }
            if (defendorUsers.Any() && defendorUsers.Count == 1 && defendorUsers[0].Connected)
            {
                defendor = defendorUsers[0];
            }


            if (ataker != null)
            {
                var client = _hub.Clients.Client(ataker.ConnectionId);
                if (client != null)
                {
                    L10N.SetCulture(ataker.Lang);
                    var atakerReport =
                        _journalOut.SetReportItem(report.AtackerUserId, new List <UserTaskDataModel> {
                        finishedTask
                    })(
                            report.CloneDeep());
                    TabReportOut.InitComplexBtnItem(atakerReport);
                    client.InvokeAsync("journalOnTaskFinished", new
                    {
                        Task                 = finishedTask,
                        TabReportOut         = atakerReport,
                        NewTotalWinnerUserCc = newTotalWinnerUserCc != null && !atakerReport.IsLose
                            ? newTotalWinnerUserCc
                            : null
                    });
                }
            }
            if (defendor != null)
            {
                var client = _hub.Clients.Client(defendor.ConnectionId);
                if (client != null)
                {
                    L10N.SetCulture(defendor.Lang);
                    var defendorReport = _journalOut.SetReportItem(report.DefenderUserId,
                                                                   new List <UserTaskDataModel> {
                        finishedTask
                    })(report.CloneDeep());
                    TabReportOut.InitComplexBtnItem(defendorReport);

                    client.InvokeAsync("journalOnTaskFinished", new
                    {
                        Task                 = finishedTask,
                        TabReportOut         = defendorReport,
                        NewTotalWinnerUserCc = newTotalWinnerUserCc != null && !defendorReport.IsLose
                            ? newTotalWinnerUserCc
                            : null
                    });
                }
            }
        }
Exemplo n.º 8
0
        public void NotyfyTaskCreated(UserTaskDataModel createdTask, int targetUserId)
        {
            IDbConnection          connection = null; // коннекшен для этого метода не нужен, это часть интерфейса
            IList <ConnectionUser> hubUsers;
            object data = null;

            if (createdTask.IsTransfer)
            {
                hubUsers = _hubCache.LocalFind(connection, (key, val) => val.UserId == createdTask.SourceUserId);
                if (hubUsers == null || hubUsers.Count != 1 && !hubUsers[0].Connected)
                {
                    return;
                }
                L10N.SetCulture(hubUsers[0].Lang);
                data = SetTaskItem(createdTask);
                _hub.Clients.Client(hubUsers[0].ConnectionId).InvokeAsync("journalOnTaskCreated", data);
                return;
            }
            if (createdTask.SourceUserId == targetUserId)
            {
                throw new NotImplementedException("createdTask.SourceUserId == targetUserId");
            }
            if (createdTask.SourceUserId == Npc.SkagryGameUserId)
            {
                hubUsers = _hubCache.LocalFind(connection, (key, val) => val.UserId == targetUserId);
                if (hubUsers == null || hubUsers.Count != 1 || !hubUsers[0].Connected)
                {
                    return;
                }
                data = SetTaskItem(createdTask);
                _hub.Clients.Client(hubUsers[0].ConnectionId).InvokeAsync("journalOnTaskCreated", data);
                return;
            }
            hubUsers = _hubCache.LocalFind(connection, (key, val) =>
                                           val.UserId == createdTask.SourceUserId || val.UserId == targetUserId);

            if (hubUsers == null || !hubUsers.Any() || hubUsers.All(i => !i.Connected))
            {
                return;
            }
            var atakerUsers   = hubUsers.Where(i => i.UserId == createdTask.SourceUserId).ToList();
            var defendorUsers = hubUsers.Where(i => i.UserId == targetUserId).ToList();
            var connectionIds = new List <string>();

            if (atakerUsers.Any() && atakerUsers.Count == 1 && atakerUsers[0].Connected)
            {
                connectionIds.Add(atakerUsers[0].ConnectionId);
            }
            if (defendorUsers.Any() && defendorUsers.Count == 1 && defendorUsers[0].Connected)
            {
                connectionIds.Add(defendorUsers[0].ConnectionId);
            }
            if (connectionIds.Any())
            {
                data = SetTaskItem(createdTask);
                var clients = _hub.Clients;
                foreach (var cid in connectionIds)
                {
                    clients.Client(cid).InvokeAsync("journalOnTaskCreated", data);
                }
            }
        }
Exemplo n.º 9
0
 public TimerExecutorItem OnUserTaskCreated(UserTaskDataModel newTask, int initiativeUserId, Action <IDbConnection> onFinnalyTimerElapsed = null)
 {
     return(_onUserTaskCreated(newTask.Duration, newTask.Id, initiativeUserId, newTask.TargetPlanetId, onFinnalyTimerElapsed));
 }
Exemplo n.º 10
0
        //item

        public int CreateTaskItem(IDbConnection connection, int currentUserId, string currentUserNickname, TaskFleet inputData)
        {
            var curretnUserPremium = _storeService.GetPremiumWorkModel(connection, currentUserId);
            //todo Check current User fleet

            //todo тип для мазера  byte srcType = 20;

            var isMother = inputData.SourceId == 0;


            var targetPlanet         = _gDetailPlanetService.GetPlanet(connection, inputData.TargetName);
            var targetPlanetGeometry = _geometryPlanetService.GetGeometryPlanetById(connection, targetPlanet.Id);
            var targetPlanetSystem   = _systemService.GetDetailSystemBySystemId(connection, targetPlanetGeometry.SystemId);

            var newTaskItem = new UserTaskDataModel {
                SourceTypeId = (byte)(isMother ? 20 : 0),
                // canselation = false,
                SourceOwnType    = !isMother,
                SourceOwnName    = MapTypes.Mother.ToString(),
                SourceUserId     = currentUserId,
                SourceOwnId      = inputData.SourceId,
                TargetPlanetName = inputData.TargetName,
                DateActivate     = UnixTime.UtcNow(),
                Duration         = 100,
                //sourceFleet = inputData.FixUnitCount(),
                IsAtack            = true,
                IsTransfer         = false,
                TargetPlanetId     = targetPlanet.Id,
                TargetPlanetTypeId = targetPlanetGeometry.TypeId,
                TargetSystemName   = targetPlanetSystem.Name
            };


            //todo  проверить наличие юнитов у пользователя
            if (inputData.IsTransfer)
            {
                newTaskItem.IsAtack    = false;
                newTaskItem.IsTransfer = true;
            }



            if (newTaskItem.SourceOwnType)
            {
                var sourcePlanet = _gDetailPlanetService.GetUserPlanet(connection, inputData.SourceId, currentUserId);
                sourcePlanet = _synchronizer.UserPlanet(connection, sourcePlanet, curretnUserPremium, _gDetailPlanetService);
                var sourcePlanetGeometry = _geometryPlanetService.GetGeometryPlanetById(connection, sourcePlanet.Id);
                var sourcePlanetSystem   =
                    _systemService.GetDetailSystemBySystemId(connection, sourcePlanetGeometry.SystemId);
                var duration =
                    MapDistanceHelper.CalculatePlanetTransferFleet(connection, sourcePlanet.Id, newTaskItem.TargetPlanetId,
                                                                   _mapAdressService, curretnUserPremium.IsActive);

                var baseUnits = sourcePlanet.Hangar;
                inputData.FixUnitCount(sourcePlanet.Hangar);
                var planetFixedUnits = inputData.Units;


                newTaskItem.SourceFleet      = planetFixedUnits;
                newTaskItem.SourceTypeId     = sourcePlanetGeometry.TypeId;
                newTaskItem.SourceOwnName    = sourcePlanet.Name;
                newTaskItem.SourceSystemName = sourcePlanetSystem.Name;
                newTaskItem.Duration         = duration.Sec;

                var calculatedUnitsToSaveToSource = UnitList.CalculateNewUnits(baseUnits, planetFixedUnits, false);
                sourcePlanet.Hangar = calculatedUnitsToSaveToSource;
                _gDetailPlanetService.AddOrUpdate(connection, sourcePlanet);
            }
            else
            {
                var mother = _mothershipService.GetMother(connection, currentUserId);
                mother = _synchronizer.UserMothership(connection, mother, curretnUserPremium, _mothershipService, _motherJumpService);
                var motherSystem = _systemService.GetDetailSystemBySystemId(connection, mother.StartSystemId);
                var duration     =
                    MapDistanceHelper.CalculateMotherTransferFleet(connection, mother.StartSystemId, newTaskItem.TargetPlanetId,
                                                                   _mapAdressService, curretnUserPremium.IsActive);

                var baseUnits = mother.Hangar;
                inputData.FixUnitCount(mother.Hangar);
                var motherfixedUnits = inputData.Units;

                newTaskItem.SourceFleet      = motherfixedUnits;
                newTaskItem.SourceSystemName = motherSystem.Name;
                newTaskItem.Duration         = duration.Sec; //25;


                // почему то небыло указано....
                newTaskItem.SourceTypeId  = 20;
                newTaskItem.SourceOwnName = currentUserNickname;

                //todo calc  оставшихся юнитов
                var calculatedUnitsToSaveToSource = UnitList.CalculateNewUnits(baseUnits, motherfixedUnits, false);
                mother.Hangar = calculatedUnitsToSaveToSource;
                _mothershipService.AddOrUpdate(connection, mother);
            }

            newTaskItem = _uTaskService.AddOrUpdate(connection, newTaskItem);

            var clonedTaskItem = newTaskItem.CloneDeep();
            var userId         = targetPlanet.UserId;

            _synchronizer.GetTaskRunner().OnUserTaskCreated(newTaskItem.CloneDeep(), userId);
            Task.Delay(50).ContinueWith(t => {
                _uTaskService.NotyfyTaskCreated(clonedTaskItem, userId);
            });
            return(newTaskItem.Id);
        }