public async static Task Register(FaceRegistrationContext appContext) //input : group name, persons names { string GroupId; if (MappingService.IsPersonGroupExist(appContext.AppId, appContext.Context.Id)) { GroupId = MappingService.GetFromMapping(appContext.AppId, appContext.Context.Id); } else {//creat group Guid g = Guid.NewGuid(); GroupId = g.ToString(); await FaceService.CreatePersonGroup(GroupId, appContext.Context.Name); await MappingService.InsertNewPersonGroup(appContext.AppId, appContext.Context.Id, GroupId); } //creat n persons string ImgURL = StorageService.GetImageUrl(appContext.AppId, appContext.Context.Id); //mapping get img using appid,contextid if (ImgURL == "") { throw new ErrorMsg("InvalidURL", "Failed to download from target server. Remote server error returned."); } foreach (User user in appContext.Users) { string PersonId; if (MappingService.GetFromMapping(appContext.AppId + "-" + appContext.Context.Id, user.Id) != "") { PersonId = MappingService.GetFromMapping(appContext.AppId + "-" + appContext.Context.Id, user.Id); } else { //create person PersonId = await FaceService.CreatePerson(GroupId, user.Name); //temp names if (PersonId == "") { throw new ErrorMsg("PersonCreationFailed", "Failed to Create person. maybe it reached the limit or connection error"); } //Console.WriteLine("person " + user.Name + " id: " + PersonId); //insert person IList <TableResult> TempResult = await MappingService.InsertNewPerson(appContext.AppId, appContext.Context.Id, PersonId, user.Id); foreach (TableResult Result in TempResult) { if (!Result.HttpStatusCode.Equals(HttpStatusCode.OK)) { throw new ErrorMsg("PersonAdditionToStorageFailed", "Failed to Store person In Azure Table"); } } //add face to person await FaceService.AddFaceToPerson(GroupId, PersonId, ImgURL, user.Face.Location);//add last image } //train person group await FaceService.TrainPersonGroup(GroupId); //check training status await FaceService.GetTrainingStatus(GroupId); } }