/// <summary> /// Register the device and pair it with the specified user. /// </summary> /// <param name="userId"> Guid representation of a userId </param> /// <returns> Returns true if device was registered to the user, false if user doesn't exist or device is already registered. </returns> public bool Post(Guid userId) { if (CurrentUser != null) return false; if (ConnectionId == Guid.Empty) return false; if (UserRegistry.ExistingId(userId)) { if (DeviceRegistry.ConnectUser(ConnectionId, userId)) { _activityController = new ActivityController(); _friendController = new FriendController(); // Subscribe to connection Notifier.Subscribe(ConnectionId, ConnectionId); // Subscribe to user Notifier.Subscribe(ConnectionId, userId); // Subscribe to friends foreach (var friend in UserRegistry.Get(userId).Friends) Notifier.Subscribe(ConnectionId, friend.Id); // Subscribe to activities and push to client foreach (var activity in _activityController.GetExtendedActivities(userId)) { Notifier.Subscribe(ConnectionId, Guid.Parse(activity["Id"].ToString())); Notifier.NotifyGroup(ConnectionId, NotificationType.ActivityAdded, activity); foreach(var resource in activity["Resources"]) Notifier.NotifyGroup(ConnectionId, NotificationType.FileDownload, resource); } // Push pending friend requests foreach (var fr in _friendController.GetFriendRequests(userId)) Notifier.NotifyGroup(ConnectionId, NotificationType.FriendRequest, new UserController().GetExtendedUser(fr.UserId)); // Push connected device to user if (DeviceRegistry.ConnectedDevices(CurrentUserId).Count == 1) Notifier.NotifyGroup(CurrentUserId, NotificationType.UserConnected, userId); return true; } } return false; }
public Task<HttpResponseMessage> Post(Guid activityId, Guid resourceId) { try { var resource = new ActivityController().GetActivity(activityId).Resources.SingleOrDefault(r => r.Id == resourceId); if(resource != null) { var task = Request.Content.ReadAsStreamAsync(); var result = task.ContinueWith(o => { var uploadTask = _fileStorage.Upload(GenerateId(resource), task.Result); return uploadTask.ContinueWith(u => { if(u.Result) { Notifier.NotifyGroup(activityId, NotificationType.FileDownload, resource); return new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; } throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.NotFound, Content = new StringContent("The resource was not uploaded.") }); }); }); return result.Result; } throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.NotFound, Content = new StringContent("The resource was not found.") }); } catch(Exception e) { throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.NotFound, Content = new StringContent(e.Message) }); } }