public async Task Join(HubRequest <MessengerConnection> request) { // Set connection Id request.Data.ConnectionId = Context.ConnectionId; request.Data.DeviceId = request.Data.DeviceId ?? defaultDevice; // Mapping connecting user to db models var user = new Messenger.ViewModels.MixMessengerUsers.ConnectViewModel(request.Data); user.CreatedDate = DateTime.UtcNow; // Save user and current device to db var result = await user.Join(); // save success if (result.IsSucceed) { // Send success msg to caller var getAvailableUsers = Messenger.ViewModels.MixMessengerUsers.DefaultViewModel.Repository.GetModelListBy(u => u.Status == (int)MixChatEnums.OnlineStatus.Connected); SendToCaller(getAvailableUsers.Data, MessageReponseKey.ConnectSuccess); // Announce every one there's new member SendToAll(user, MessageReponseKey.NewMember, false); } else { // Send failed msg to caller SendToConnection(result, MessageReponseKey.ConnectFailed, Context.ConnectionId, false); } }
private Task JoinGroup(HubRequest <JObject> request) { var groupMembers = GetGroupMembers(request); var connection = request.Data.ToObject <MessengerConnection>(); // Set connection Id connection.ConnectionId = Context.ConnectionId; connection.DeviceId = connection.DeviceId ?? MixConstants.ServiceHub.DefaultDevice; // Mapping connecting user to db models var user = new Messenger.ViewModels.MixMessengerUsers.ConnectViewModel(connection) { CreatedDate = DateTime.UtcNow }; // Save user and current device to db return(user.Join().ContinueWith((task) => { // save success if (task.Result.IsSucceed) { // Get Online users var getAvailableUsers = Messenger.ViewModels.MixMessengerUsers.DefaultViewModel.Repository.GetModelListBy(u => u.Status == (int)Messenger.MixChatEnums.OnlineStatus.Connected); var hubMsg = new RepositoryResponse <MessengerConnection>() { Status = 200, Data = connection }; return Task.WhenAll(new Task[] { Groups.AddToGroupAsync(Context.ConnectionId, request.Room), SendToCaller(getAvailableUsers.Data, MessageReponseKey.ConnectSuccess), SendToGroup(connection, MessageReponseKey.NewMember, request.Room), // Announce every one there's new member SendToAll(user, MessageReponseKey.NewMember, false) }); } else { // Send failed msg to caller return SendToConnection(task.Result, MessageReponseKey.ConnectFailed, Context.ConnectionId, false); } })); }