2017-01-06 1 views
0

내가 첫째로 나는 그것의 모든 데이터가 GroupTable에 삽입 할 줘야 해 그룹을 생성하고, GroupChat에 사용되는 세 개의 테이블, 다음 groupCreation의 성공에 내가있는 것 insertConnectionId 함수를 호출하고이 아래 MapGroupConnectionId 백엔드에서 SignalR 연결 ID를 생성하고 groupId 및 groupCreaterId를 사용하여 GroupTable에 삽입하십시오. 해당 작업 벌금 및 친구 ID로 구성된 그룹 친구 테이블이 있습니다. 이제 어떤 친구가 특정 그룹에 메시지를 보내면 필요합니다. SignalR을 통해 특정 그룹에있는 모든 사람들에게 메시지를 보냅니다. 그룹 테이블의 groupConnectionID를 해당 그룹과 관련된 모든 회원에게 할당하면 Gr이 수신 할 특정 그룹으로 메시지를 보낼 수 있습니다. 내가 잘못된 방법으로 그 일을하고있는 경우 oupFriends, 다른 기능 만 Hub.Client.ALL에 대한 아니라 작품 내 허브, 나를 인도 해주십시오, 나는 새가 signalR그룹 채팅 신호 R

//Group Table 

groupID groupName groupImage groupCreaterId groupConnectionId groupsignalrIsConnected 
    1   dude  someurl  421  somestringID  TRUE 
    2   god  someurl  444  somestringID  TRUE 
    3   heaven  someurl  543  Null    FALSE 
    4   hell  someurl  678  Null    FALSE 


//Group Friends Table 

groupFriendsTabID groupId groupFriendsId 
     111    2 444 
     112    3 678 
     113    2 421 
     114    4 444 
     115    1 543 
     116    4 421 
     117    1 678 
     118    2 543 
     119    3 444 


    //Group Message Table 

    groupMesTabId groupId groupsenderId groupMessage 
     22    1 543    hello 
     23    3 678    hi 


//My HUB 
[HubName("groupChatHub")] 
public class GroupChatHub : Hub 
{ 
    GroupRepository group= new GroupRepository(); 


    public void **MapGroupConnectionId**(long groupID,int groupCreatorId) 
     { 
     if (groupID != 0 && groupCreatorId!=0) 
      { 
      CBG.MapGroupConnectionId(groupID, Context.ConnectionId); 
       Clients.Client(Context.ConnectionId).configureUserSettings();} 
      } 

    public override Task OnConnected() 
    { 
     var connectionId = Context.ConnectionId; 
     return base.OnConnected(); 
    } 
    public override Task OnDisconnected(bool stopCalled) 
    { 
     var connectionId = Context.ConnectionId; 
     return base.OnDisconnected(stopCalled); 
    } 
    public override Task OnReconnected() 
    { 
     return base.OnReconnected(); 
    } 
} 

    //My WEBAPI// 
    public class GroupController : ApiControllerWithHub<GroupchatHub> 
    { 
     public IhttpActionResult InsertNewMessage(messageModel model) 
     { 
       //Here i am inserting new message to Database using some function it works fine// 

      after success of inserting message i need to send that message to groupmembers using signalr 

    //here i am fetching the connectionID through groupID from group table 
     var connectionID=repository.getConnection(model.groupID) 

      var messager = "11"; 
    Hub.Clients.All.getGroupChat(messager); // this works 

    Hub.Clients.clients(connectionID).getGroupChat(messager);this not working it except IList<string> 

    Hub.Clients.Groups(groupName,ConnectionID).getGroupChat(messager); this is not working 
     } 
    return ok(Model); 
    } 



//MyClientEnd// 

    var Grouphub 

//this insertConnectionId is called once the group is created on the success of group creation and SignalRconnectionstring is inserted in GroupTable 

function insertConnectionId(groupId,groupCreatorID) 
$.connection.hub.start().done(function() { 
    console.log('Now connected, connection ID=' + $.connection.hub.id); 
    console.log("Connected, transport = " +  $.connection.hub.transport.name); 
    Grouphub.server.mapGroupConnectionId(groupID, groupCreatorID); 
}); 
$.connection.hub.error(function (error) { 
    console.log('SignalR error: ' + error) 
}); 

}); 

Grouphub = $.connection.groupChatHub 
Grouphub.client.getGroupChat = function (data) { 
    alert("in"); 

} 

답변

0

에 내가 비슷한 프로젝트 같은 짓입니다 및

체크 아웃 그것은 당신이 나에게 도움이 프로젝트에

https://github.com/DenizGokce/SignalR

+0

@thanks를 :) 도움이 예제를 다른 분야에서 그것을 사용, 난 그냥, 내가 사용한 방법을 알고 싶어 사용자가 signalr 연결 문자열을 바인드하여 Database에 저장합니다. 위의 코드, 그것을 달성하는 좋은 방법 또는 더 나은 방법이 있다면 알려주 – Nikil