public static int GetNumberOfPaths(int block_idx_x, int block_idx_y) { string partition_key = Config.DRAWING_PAR_KEY_PREFIX + block_idx_x.ToString() + ',' + block_idx_y.ToString(); TableOperation op = TableOperation.Retrieve <DrawingInfoEntity>(partition_key, Config.SPECIAL_KEY); TableResult result = Warehouse.DrawingsTable.Execute(op); DrawingInfoEntity info_entity = (DrawingInfoEntity)result.Result; if (info_entity != null) { return(info_entity.NextId); } else { return(0); } }
private static int /*0=suc, 1=fail, 2=full, 3=suc almost full*/ addPath(PathModel model) { string partition_key = Config.DRAWING_PAR_KEY_PREFIX + model.BlockIndexX.ToString() + ',' + model.BlockIndexY.ToString(); try { TableOperation op = TableOperation.Retrieve <DrawingInfoEntity>(partition_key, Config.SPECIAL_KEY); TableResult result = Warehouse.DrawingsTable.Execute(op); DrawingInfoEntity info_entity = (DrawingInfoEntity)result.Result; if (info_entity != null) { if (info_entity.NextId >= Config.BLOCK_FULL_THRESHOLD) { return(2); } info_entity.NextId++; Warehouse.DrawingsTable.Execute(TableOperation.Replace(info_entity)); } else { info_entity = new DrawingInfoEntity(partition_key); info_entity.NextId++; Warehouse.DrawingsTable.Execute(TableOperation.Insert(info_entity)); } string row_key = Config.DRAWING_ROW_KEY_PREFIX + (info_entity.NextId - 1).ToString("D" + Config.DRAWING_ROW_KEY_DIGITS); DynamicTableEntity entity = new DynamicTableEntity(partition_key, row_key); entity["t"] = new EntityProperty(model.Type); entity["u"] = new EntityProperty(model.UserId); entity["l"] = new EntityProperty(model.Layer); entity["z"] = new EntityProperty(model.Zoom); entity["tm"] = new EntityProperty(model.TransformMatrix); entity["o"] = new EntityProperty(model.Color); entity["s"] = new EntityProperty(model.TipSize); entity["b"] = new EntityProperty(model.BrushId); entity["r"] = new EntityProperty(model.Blur); if (model.Idiosyncrasy.Length != 0) { entity["i"] = new EntityProperty(model.Idiosyncrasy); } entity["hx"] = new EntityProperty(model.HeadX); // typed changed from int to string. entity["hy"] = new EntityProperty(model.HeadY); // typed changed from int to string. entity["bx"] = new EntityProperty(model.BlockIndexX); entity["by"] = new EntityProperty(model.BlockIndexY); entity["c"] = new EntityProperty(model.DxDyCombined); entity["g"] = new EntityProperty(model.Gsid); Warehouse.DrawingsTable.Execute(TableOperation.Insert(entity)); // //HomeManager.onNewPath(model.BlockIndexX, model.BlockIndexY, info_entity.NextId); return(info_entity.NextId >= Config.BLOCK_ALMOST_FULL ? 3 : 0); } catch (StorageException ex) { // "遠端伺服器傳回一個錯誤: (409) 衝突。" when inserting duplicated entities. // "遠端伺服器傳回一個錯誤: (412) Precondition Failed。" when entity is modified in between. return(1); } }