PIDL
์์ฑ ๋ฐ ์
ํ
ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. Visual Studio์์ txt ํ์ผ๋ก ํ์ผ์ ์์ฑํ๊ณ , ํ์ฅ์๋ฅผ PIDL๋ก ๋ฐ๊พผ ํ ์ปดํ์ผ์ ์ํ ์ธํ ์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ํ์ฅ์๊ฐ PIDL์ธ ํ์ผ๋ค์ Custom Build ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
Visual Studio ์๋ฃจ์ Viewer
์์ฑํ PIDL ํ์ผ ์ฐ ํด๋ฆญ
์์ฑ -> General -> Item Type: Custom Build Tool
PIDL ๋ฌธ๋ฒ
PIDL์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
global (namespace)
(๋ฉ์์ง์ ID ์ฒซ ์์ ๊ฐ)
{
ํจ์ ์ ์ธ([in] ํจ์ Parameter, โฆ)
}
์ปดํ์ผ์ ํ๊ฒ ๋๋ฉด namespace๋ฅผ ์์ฑ ํ, Stub๊ณผ Proxy Class๋ ์ด namespace ์์ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ๋ชจ๋ RMIํจ์๋ค์ ๊ณ ์ ID๋ฅผ ๊ฐ๊ฒ ๋๋๋ฐ ์ด ๊ฐ์ โ๋ฉ์์ง์ ID ์ฒซ ์์ ๊ฐโ ์ผ๋ก๋ถํฐ +1์ฉ ์ถ๊ฐ๋์ด ID๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ๋จ, 0 ~ 1,300 ์ฌ์ด์ ID์ 63,000 ์ดํ์ ID๋ ProudNet ๋ด๋ถ ๋ฉ์์ง๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด ์ธ์ ๋ฒํธ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
// C#์์ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์ ๋ณ๊ฒฝ์ด ํ์ํ ๋ณ์๋ค์ ์ ์ํฉ๋๋ค.
rename cs(Proud::String, System.String);
global S2C 1000
{
// Protocol์ ์ ์ํฉ๋๋ค.
Chat([in] Proud::String txt);
}
์์ฑ๋ Proxy & Stub ํ์ผ ์ฌ์ฉ๋ฒ
PIDL์ ์คํํ์๋ฉด ์๋์ ๊ฐ์ 6๊ฐ์ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
PIDLํ์ผ๋ช _common.Cpp
PIDLํ์ผ๋ช _common.h
PIDLํ์ผ๋ช _proxy.Cpp
PIDLํ์ผ๋ช _proxy.h
PIDLํ์ผ๋ช _stub.Cpp
PIDLํ์ผ๋ช _stub.h
C#์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ 3๊ฐ์ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
PIDLํ์ผ๋ช _common.cs
PIDLํ์ผ๋ช _proxy.cs
PIDLํ์ผ๋ช _stub.cs
common ํ์ผ์ ์ ์ธํ ๊ฐ๊ฐ hํ์ผ์ header์, cppํ์ผ์ cppํ์ผ์ #include ํด์ฃผ๋ฉด ํธ๋ฆฌํฉ๋๋ค. .hํ์ผ๊ณผ .cpp ํ์ผ์ ํ๋ก์ ํธ์ ํฌํจ์์ผ๋ ๋์ง๋ง, Custom Build ์ฌ์ฉ์ผ๋ก ์ธํ์ฌ ํ์ผ ๋ณ๊ฒฝ์ด ์์ฃผ ์ผ์ด๋๋ฏ๋ก ์ฃผ์ํฉ๋๋ค. ์์ฑ๋ RMI ํจ์์๋ ์ ์ํ ๋ณ์ ์ธ์ ๋ ๊ฐ์ง ํ๋ผ๋ฏธํฐ๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ,์๋ฒ์ Proxy ๋ถ์ด๊ธฐ
PIDL ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ Proxy ์ธ์คํด์ค๋ฅผ ๋จผ์ ์์ฑํ ํ ์ธ์คํด์ค๋ฅผ Proud.CNetClient ๋ Proud.CNetServer์ ๋ฑ๋กํด์ผ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ Proud.IRmiHost ๋ฅผ ์์๋ฐ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ์๋ ๋ฉ์๋ AttachProxy ๋ฅผ ํตํด proxy๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ ๊ฐ๊ฐ์ Proxy๋ ๋๊ฐ ์ด์์ ๋ถ์ฌ๋ ๋ฉ๋๋ค. ๋จ, ๋ฉ์์ง ID์ ๋ฒ์๊ฐ ๊ฒน์น๋ฉด ์๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, TestA.Proxy๊ฐ ์๊ณ TestB.Proxy๋ฅผ ํ ๊ฐ์ CNetClient์ ๋ถ์ธ๋ค๊ณ ๊ฐ์ ํ์๋, ๋ง์ฝ TestA์ ์ฒซ ๋ฉ์์ง ID๋ฅผ 2,100์ผ๋ก, TestB์ ์ฒซ ๋ฉ์์ง ID๋ฅผ 2,200์ผ๋ก ์ ์ธํ๋ค๋ฉด, TestA์ ์ ์ธ๋ RMI ํจ์์ ๊ฐฏ์๊ฐ 200๊ฐ์ธ ๊ฒฝ์ฐ TestA์ ๋ฐฐ์ ๋๋ ๋ฉ์์ง ID๋ 2,100~2,300์ด ๋์ดTestB์ ๋ฉ์์ง ID๊ฐ ๊ฒน์น๊ฒ ๋ฉ๋๋ค. ๋ถ์ด๋ Proxy์ ๋ฉ์์ง ID๊ฐ ๊ฒน์น๊ฒ ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ throw๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ,์๋ฒ์ Stub ๋ถ์ด๊ธฐ
// C++11 ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
<exam.pidl>
Func1([in] int a, [in] string b);
<exam.cpp>
class Exam
{
int x = 1;
Exam::StubFunction examStub;
void Main()
{
int y = 3;
// PARAM_Exam_Func1์ Exam_stub.h์ ์ ์๋์ด ์๋ define ์
๋๋ค.
examStub.Func1_Function = [this, y]PARAM_Exam_Func1 {
x += a;
y += a;
return true;
};
}
};
PIDL ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ Stub ์ธ์คํด์ค๋ ๋คํธ์ํฌ๋ก ์์ ๋ ๋ฉ์์ง์ ์ํด ์คํ๋ RMI ํจ์๋ค์ virtual function์ผ๋ก ๊ฐ๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ ์์๋ ์ด Stub ํด๋์ค๋ฅผ ์์๋ฐ์ RMI ํจ์๋ค์ ์ค๋ฒ๋ผ์ด๋ํด์ผ ํฉ๋๋ค.
C++์ ๊ฒฝ์ฐ PIDL ์ปดํ์ผ๋ฌ๋ ๊ฐ๋ฐ์์ ํธ์๋ฅผ ์ํด RMI ํจ์ ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ๊ฐ ํฌ์ฅ๋ ๋ค์๊ณผ ๊ฐ์ ํํ์ ๋งคํฌ๋ก๋ฅผ ์์ฑํฉ๋๋ค.
#define DECRMI_S2C_ShowChat bool ShowChat(Proud::HostID remote,Proud::RmiContext &rmiContext,const CString &a,const int &b,const float &c)
#define DEFRMI_S2C_ShowChat(DerivedClass) bool DerivedClass::ShowChat(Proud::HostID remote,Proud::RmiContext &rmiContext,const CString &a,const int &b,const float &c)
- ๋งคํฌ๋ก ์ฌ์ฉ ์์
// ๋งคํฌ๋ก ์ฌ์ฉ ์์
// 1. ์์๋ Stub ํด๋์ค์ class ์ ์ธ์์ DECRMI_๋ค์์คํ์ด์ค_๋ฉ์๋ ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
// 2. ์์๋ Stub ํด๋์ค์ ๋ฉ์๋ ์ ์์์ DEFRMI_๋ค์์คํ์ด์ค_๋ฉ์๋ ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// ์ฌ์ฉ ์์
// PIDL ํ์ผ ๋ด์ฉ
global LobbyC2S 5000
{
Foo([in] int a,[in] float b);
}
// LobbyC2S์ Stub์ ์์๋ฐ์ RMI๋ฅผ ๊ตฌํํ๋ ํด๋์ค
class LobbyC2SStub:public LobbyC2S::Stub
{
DECRMI_LobbyC2S_Foo;
};
// LobbyC2S์ RMI Foo์ ๋ฃจํด ๊ตฌํ
DEFRMI_LobbyC2S_Foo(LobbyC2SStub)
{
// ์ฌ๊ธฐ์์ ์ฃผ์ด์ง๋ ํ๋ผ๋ฉํฐ๋ PIDL ์ LobbyC2S.Foo ์ ํ๋ผ๋ฉํฐ์ ๋์ผํฉ๋๋ค.
a++;
b++;
return true;
}
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ Proud.IRmiHost๋ฅผ ์์ ๋ฐ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ์๋ ๋ฉ์๋ Proud.IRmiHost.AttachStub ์ ํตํด stub์ ๋ฑ๋กํ ์ ์์ต๋๋ค. Proxy์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ์์ง ID๊ฐ ๊ฒน์น์ง ์๋ ์กฐ๊ฑด ํ์ 2๊ฐ ์ด์์ Stub์ ๋ถ์ผ ์ ์์ต๋๋ค.
- ํต์ ์ ์ํ Option Class
๋ด๋ถ Static์ผ๋ก ์ ์ธ๋ ๋ณ์๋ค์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
Proud::HostID
Nettention.Proud.HostID
ํต์ ํ๊ณ ์ ํ๋ ์๋ Host์ ID๊ฐ
Proud::RmiContext
Nettention.Proud.RmiContext
๋ณด๋ด๊ฑฐ๋ ๋ฐ๊ธฐ ์ํ ์ต์
ReliableSend
Reliable ํต์
FastEncryptedReliableSend
๋น ๋ฅธ ์ํธํ ๋ฐฉ์(๋ณด์์ฑ์ด ๋ฎ์)์ ์ฌ์ฉํ๋ Reliableํต์
SecureReliableSend
์ํธํ๋ Reliableํต์
UnreliableSend
Unreliable ํต์
FastEncryptedUnreliableSend
๋น ๋ฅธ ์ํธํ ๋ฐฉ์(๋ณด์์ฑ์ด ๋ฎ์)์ ์ฌ์ฉํ๋ Unreliable ํต์
SecureUnreliableSend
์ํธํ๋ Unreliable ํต์
๋ง์ด ์ฌ์ฉํ๋ Option ์ Static์ผ๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. ์ฌ์ฉ์ ํธ์์ ๋ฐ๋ผ ์ง์ ์์ฑํ์ฌ ์ํ์๋ Option์ ์ ํ ์ ์์ต๋๋ค.
m_reliability: Reliable & Unreliable ํต์ ๋ฐฉ์ ์ ํ m_encryptMode: ์ํธํ ์ฌ๋ถ(์๋์ ๋ณด์์ฑ์ ๋ฐ๋ผ ์ธ๊ฐ์ง Option ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.) m_compressMode: ์์ถ ์ฌ๋ถ
ํ์ฉ
PIDL ํ์ฉ๋ฒLast updated
Was this helpful?