14.호스트간 통신 하기

11. PIDL 컴파일 결과물 포함하기에서 세팅된 Proxy를 사용하여, 메시지를 송신 합니다.

메시징 프로토콜은 RmiContext.ReliableSend 혹은 RmiContext.UnreliableSend를 사용할 수 있습니다. (주의!! RmiContext.ReliableSend 혹은 RmiContext.UnreliableSend등은 class로 되어 있습니다. C# 의 특성상 이것은 =를 사용하게 되면 reference가 되므로, 주의 하십시오.)

이것은 서버와 P2P 통신간 모든 Proxy에서 사용하실 수 있습니다.

아래는 메시지를 송신하는 예입니다. (RMI Foo(int a,float b)가 선언되었다고 가정합니다.)

HostID oneHostID=...; // 1개의 송신 대상
int manyHostIDListCount=...;

// 서버에게 RMI를 보낸다.
myProxy.Foo(Nettention.Proud.HostID.Server,Nettention.Proud.RmiContext.ReliableSend,3,4);

// 1개의 송신 대상에게 RMI를 보낸다.
myProxy.Foo(oneHostID,Proud::RmiContext::UnreliableSend,3,4);

송신 대상은 클라이언트의 Host ID나 서버의 Host ID(Nettention.Proud.HostID.Server) 혹은 자기 자신을 넣을 수 있습니다. 또한, 송신 대상으로 P2P 그룹 ID를 넣으면 해당 P2P 그룹으로 멀티 캐스트가 됩니다.

한번에 여러 대상에게 멀티 캐스트를 할 수도 있습니다. 첫번째 파라메터로 HostID 대신 HostID 배열의 포인터와 HostID배열의 크기를 넣으면 됩니다. (아래 예)

// 송신 대상 배열
HostID[] sendTo = new HostID[2];
sendTo[0] = ...;
sendTo[1] = ...;

// 여러 송신 대상에게 한번에 송신한다.
myProxy.Foo(sendTo, 2, Nettention.Proud.RmiContext.ReliableSend, 3, 4);

이때 리스트에서 송신 대상이 중복될 경우 중복해서 보내지지 않고, 1회만 보내집니다. 리스트에는 1개 호스트 뿐만 아니라 P2P 그룹도 송신 대상으로 지정 가능합니다.

11. PIDL 컴파일 결과물 포함하기에서 세팅된 Stub를 사용하여, 메시지를 수신합니다.(세팅 하지 않으면 수신되지 않습니다.)

...
myStub.Foo = Foo; // delegate를 세팅합니다.
...

//foo함수를 선언, 위의 stub의 delegate에 세팅합니다. 그러면 이곳으로 콜백됩니다.
void Foo(Nettention.Proud.HostID remote,Nettention.Proud.RmiContext rmiContext,int a,float b)
{
    ...
    return true;//이 return의 의미는 메시지가 처리 되었다는 의미입니다. 무조건 true로 하시는게 좋습니다.
}