/// <summary> /// Compile and run <paramref name="buildingTask"/> to completion /// </summary> /// <param name="buildingTask">description of building operation</param> private async Task RunToCompletion(IServiceScope scope, BuildingTask buildingTask) { var compiler = scope.ServiceProvider.GetRequiredService <ICompiler>(); var runner = scope.ServiceProvider.GetRequiredService <IRunner>(); var editorHubContext = scope.ServiceProvider.GetRequiredService <IHubContext <LiveEditorHub> >(); var projectName = buildingTask.ProjectName; var buildingResult = default(BuildingResult); using var sw = new StringWriter(); try { Console.SetOut(sw); Console.SetError(sw); var assemblyBytes = await compiler.CompileAsync(buildingTask); buildingResult = await runner.ExecuteAsync(assemblyBytes, Array.Empty <string>()); buildingResult.ResultMessage = sw.ToString(); } catch (Exception ex) when(ex is InvalidOperationException || ex is ArgumentNullException) { buildingResult = new BuildingResult { ResultMessage = ex.Message }; } finally { await editorHubContext .Clients .Group(projectName) .SendAsync(nameof(LiveEditorHub.ProjectCompiled), projectName, buildingResult); } }
public void BuildStation(StationData stationData, out BuildingResult result) { Tile <TileData> tile = stationData.Tile; GameObject newStationObject = Instantiate(stationPrefab, tile.CartesianPosition, Quaternion.identity, builtObjectParent.transform); Station newStation = newStationObject.GetComponent <Station>(); newStation.UpdateData(stationData); tile.Data.HasStation = true; tile.Data.Station = newStation; newStationObject.GetComponent <Station>().SetTile(tile); AddTracksToTile(tile); worldMap.AddBuiltObject(tile.Position, newStationObject); List <Station> transitSystemStations = gameManager.transitSystem.Stations; transitSystemStations.Add(newStation); gameManager.transitSystem.UpdateAllStationConnections(); result = BuildingResult.Success; }
public void BuildTrack(TrackData trackData, out BuildingResult result) { Tile <TileData> tile = trackData.Tile; AddTracksToTile(tile); gameManager.transitSystem.UpdateAllStationConnections(); result = BuildingResult.Success; }
private void DemolishTrack(IBuildableData demolishData, out BuildingResult result) { Tile <TileData> tile = demolishData.Tile; RemoveTracksFromTile(tile); gameManager.transitSystem.UpdateAllStationConnections(); result = BuildingResult.Success; }
//获取楼栋接口 public ActionResult GetBuilding(string data) { BuildingResult r = new BuildingResult(); if (string.IsNullOrEmpty(data)) { r.info = "参数data不能为空!"; r.success = false; } else { r = us.PushBuildingInfo(data); } return(Content(r.ToJson())); }
public void Demolish(IBuildableData demolishData) { BuildingResult result = BuildingResult.Init; if (moneyManager.CanSpend(demolishData.Price)) { switch (demolishData.Buildable) { case Buildable.Station: DemolishStation(demolishData as StationData, out result); break; case Buildable.Track: DemolishTrack(demolishData as TrackData, out result); break; case Buildable.All: DemolishAll(demolishData, out result); break; default: throw new ArgumentOutOfRangeException(); break; } } else { result = BuildingResult.InsufficientFunds; } switch (result) { case BuildingResult.Success: moneyManager.Spend(demolishData.Price); break; case BuildingResult.InsufficientFunds: case BuildingResult.SpaceBlocked: case BuildingResult.IllegalPlacement: case BuildingResult.NothingThere: Debug.LogWarning("Demolish Failed - " + demolishData.Buildable + " - " + result); break; default: throw new ArgumentOutOfRangeException(); break; } }
public void Build(IBuildableData buildableData) { BuildingResult result = BuildingResult.Init; if (moneyManager.CanSpend(buildableData.Price)) { switch (buildableData.Buildable) { case Buildable.Station: BuildStation(buildableData as StationData, out result); break; case Buildable.Track: BuildTrack(buildableData as TrackData, out result); break; default: throw new ArgumentOutOfRangeException(); } } else { result = BuildingResult.InsufficientFunds; } switch (result) { case BuildingResult.Success: moneyManager.Spend(buildableData.Price); break; case BuildingResult.InsufficientFunds: case BuildingResult.SpaceBlocked: case BuildingResult.IllegalPlacement: Debug.LogWarning("Build Failed - " + buildableData.Buildable + " - " + result); break; default: Debug.LogError("BuildResult was not properly set"); break; } }
private static void writeBuldingData(BuildingResult buildingResultData) { string sqlCommandText = $@" INSERT INTO building ( building_id, building_name, campus_id ) VALUES ( '{buildingResultData.msg.building_id}', '{buildingResultData.msg.building_name}', '{buildingResultData.msg.campus_id}' );" ; writeSqlData(sqlCommandText); Console.WriteLine("Added buildingResultData"); }
//获取楼栋信息接口(参数:楼盘ID) public BuildingResult PushBuildingInfo(string data) { BuildingResult r = new BuildingResult(); try { List <BuildingModel> list = new List <BuildingModel>(); string sql = string.Format(@"select * from TB_BUILDING(nolock) where STATUS=1 and ESTATE_GUID='{0}' order by BUILDING_NUMBER;", data); using (SqlDataReader rd = db.ExecuteReader(sql)) { while (rd.Read()) { BuildingModel mode = new BuildingModel(); mode.BUILDING_GUID = getRdString(rd, "BUILDING_GUID"); mode.BUILDING_NUMBER = getRdString(rd, "BUILDING_NUMBER"); mode.ESTATE_GUID = getRdString(rd, "ESTATE_GUID"); mode.BUILDING_ADDRESS = getRdString(rd, "BUILDING_ADDRESS"); mode.FLOOR_TOTAL = getRdString(rd, "FLOOR_TOTAL"); mode.ROOM_TOTAL = getRdString(rd, "ROOM_TOTAL"); list.Add(mode); } rd.Close(); rd.Dispose(); } r.success = true; r.info = "成功"; r.data = list; } catch (Exception ex) { r.success = false; r.info = ex.Message; } return(r); }
private void DemolishAll(IBuildableData demolishData, out BuildingResult result) { throw new NotImplementedException(); }
private void DemolishStation(StationData stationData, out BuildingResult result) { throw new NotImplementedException(); }
public async Task ProjectCompiled(string projectName, BuildingResult buildResult) => await Clients.Group(projectName).SendAsync(nameof(ProjectCompiled), projectName, buildResult);