문제

RaiseEvent를 보낼 때 Interest Group을 설정하니 메시지를 받지 못하는 문제가 있었다.

(다르게말하면 ReceiverGroup.All이 작동하지 않는 문제)


코드상으로는 문제가 없는데 왜그럴까해서 빌드하여 다수의 클라이언트로 테스트하니 

자신(로컬)에게는 오지않지만 다른사람들은 메세지를 잘 받더라.




원인

인터넷을 찾다보니 나와 똑같은 증상을 겪는 글을 발견했다.

https://forum.photonengine.com/discussion/6497/receivergroup-all-doesnt-seem-to-work-for-raiseevent


이유는 InterestGroup을 설정하면 Receivers 옵션이 무시되서 그렇단다.

공식문서에도 없는 내용이었고 2015년에도 있던 문제인데 아직까지 해결이 안됐다니.. 


1
2
3
4
5
6
PhotonNetwork.RaiseEvent(33nulltruenew RaiseEventOptions
{
    CachingOption = EventCaching.DoNotCache,
    Receivers = ReceiverGroup.All,
    InterestGroup = (byte)30
});
cs


이렇게 보내면 InterestGroup 때문에 CachingOption 무시(0번 외의 그룹은 캐싱하지않음), Receiver 무시 (버그인듯)

되어 결국 InterestGroup만 설정되버린다





해결

현실에 순응하기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void ExecutionRaiseEvent()
{
    byte[] content = new byte[] { 30 };
    PhotonNetwork.RaiseEvent(33, content, truenew RaiseEventOptions
    {
        CachingOption = EventCaching.DoNotCache,
        Receivers = ReceiverGroup.All
    });
}
 
public void ReceiveRaiseEvent(byte eventcode, object content, int senderid)
{
    byte[] selected = (byte[])content;
    int interestGroup = selected[0];
    if (eventcode == 33)
    {
        if(interestGroup == 30)
            print("rrrrr");
    }
}
cs


Receivers는 All로. InterestGroup은 Content에 담아보낸다.

RaiseEvent를 수신한 후 content에서 InterestGroup을 가져와 필터링

Posted by misty_
,