2014-03-30 2 views
0

웹 브라우저 Reversi 게임을 만들고 있습니다. 나는 통신을 위해 SignalR을 사용한다. 나는 이미 서버와 하나의 클라이언트 사이에 2 개의 측면 통신을 구현했다. 이제 문제가 발생했습니다.필터링 된 클라이언트에게 메시지 보내기

여러 게임이 동시에 진행됩니다. 각 게임에는 2 명의 플레이어가 있습니다. 푸시 알림과 비동기 통신을 사용하고 싶습니다. 더 정확하게 내가 시간을 결정할 때 플레이어에게 알림을 푸시하고자하는 것에 대해 알리지 않습니다. 그러나 은 모든 플레이어에게이 아니며 특정 게임에 연결된 두 사람에게만 제공됩니다.

지금까지 그런 식으로 그것을 (호출자에게 데이터를 전송하기 위해) :

Clients.Caller.GameStatusUpdated(status); 

이 방법 나는 두 번째 플레이어를 호출 할 수 없습니다. Clients.Caller 개체를 저장할 수 있다고 생각했지만 모든 호출 (동일한 클라이언트 허브에서도 연결되어 있음)이 서버 허브의 새 인스턴스를 만듭니다. Clients.Caller의 해시 코드는 매번 다릅니다.

여기에 갈 수있는 올바른 방법은 무엇입니까?

답변

1

You can take a loot at groups

, 당신은 단지 그룹에 추가 :

public Task JoinRoom(string roomName) 
{ 
    return Groups.Add(Context.ConnectionId, roomName); 
} 

그냥 당신이 (경기당 즉, 하나의 roomName) 게임 당 하나 개의 그룹이 있는지 확인하십시오.

그럼 당신은

Clients.Group(roomName).GameStatusUpdated(status) 

는 카페에서 탈퇴 (우리의 경우 roomName)를 같은 그룹에있는 모든 사용자와 통신 할 수 있습니다 :

public Task LeaveRoom(string roomName) 
{ 
    return Groups.Remove(Context.ConnectionId, roomName); 
} 

그룹이 유일한 해결책이 아니다. 메모리 내 매핑이나 데이터베이스 매핑을 사용할 수 있습니다. Take a look here.

3

나는 SignalR groups가 문제를 해결할 것이라고 생각합니다. 각 개별 게임의 각 플레이어를 고유 한 그룹에 추가하려고합니다. 그런 다음 Clients.Group(game). GameStatusUpdated(status)을 사용하여 개별 게임 그룹에게 업데이트를 알릴 수 있습니다. 사용자가 게임에 가입하면

관련 문제