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); }
private TabTaskOut _setTaskItem(UserTaskDataModel newTaskItem) { if (newTaskItem.Id == 0) { throw new Exception(Error.TaskNotExist); } var ti = _uTaskService.SetTaskItem(newTaskItem); return((TabTaskOut)ti); }
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); }
public UserTaskDataModel SetUpdateInProgress(IDbConnection connection, UserTaskDataModel taskItem) { return(_uTaskCache.SetUpdateInProgress(connection, taskItem)); }
public TabTaskOut SetTaskItem(UserTaskDataModel newTaskItem) { return(_journalOut.SetTaskItem(newTaskItem)); }
public UserTaskDataModel AddOrUpdate(IDbConnection connection, UserTaskDataModel dataModel) { var db = _userTaskRepo.AddOrUpdateeModel(connection, dataModel); return(_uTaskCache.UpdateLocalItem(connection, db)); }
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 }); } } }
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); } } }
public TimerExecutorItem OnUserTaskCreated(UserTaskDataModel newTask, int initiativeUserId, Action <IDbConnection> onFinnalyTimerElapsed = null) { return(_onUserTaskCreated(newTask.Duration, newTask.Id, initiativeUserId, newTask.TargetPlanetId, onFinnalyTimerElapsed)); }
//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); }