IPacket
업데이트: 2007년 11월
데이터를 보관하며 IDevicePacketStream을 구현하여 장치 에이전트 응용 프로그램과 데스크톱 컴퓨터 간에 데이터를 전송하는 개체에 사용됩니다.
IPacket : public IUnknown
메서드
메서드 |
설명 |
---|---|
패킷의 총 데이터 개체 수를 가져옵니다. |
|
내부 반복기가 패킷의 끝에 도달했는지 확인합니다. |
|
개체에서 부울 값을 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
개체에서 바이트를 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
개체에서 바이트 배열을 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
개체에서 정수를 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
개체에서 문자를 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
패킷에 있는 현재 개체의 데이터 형식을 열거형 값으로 반환합니다. |
|
개체에서 문자열을 읽고 내부 반복기가 패킷의 다음 데이터 개체를 가리키도록 합니다. |
|
패킷의 내부 반복기가 패킷의 첫 번째 데이터 개체를 가리키도록 다시 설정합니다. 다음 읽기 작업에서는 패킷의 첫 번째 데이터 개체를 읽습니다. |
|
개체에 부울 값을 씁니다. |
|
개체에 바이트를 씁니다. |
|
개체에 바이트 배열을 씁니다. |
|
개체에 문자를 씁니다. |
|
개체에 정수를 씁니다. |
|
개체에 문자열을 씁니다. |
설명
이 인터페이스를 구현하는 개체를 가져오려면 GetNewPacket를 사용합니다.
이 인터페이스를 구현하는 개체는 byte, byte[], string, int 및 char 형식의 개체만 보관할 수 있습니다. 이 인터페이스는 사용자 지정 개체를 읽고 쓰도록 확장할 수 없습니다. 그러나 사용자는 사용자 지정 데이터 형식을 기본 데이터 형식으로 분할하거나 바이트 배열로 serialize하여 스트림을 통해 사용자 지정 개체를 전송할 수 있습니다.
예제
다음 예제는 패킷 하나를 데스크톱에 쓰고 데스크톱에서 패킷 하나를 읽는 장치 에이전트 응용 프로그램입니다.
#include "stdafx.h"
// Custom implementation of IAgentTransportShutdownCallback
class MyShutdownCallback: public IAgentTransportShutdownCallback
{
private:
long ref;
public:
HRESULT STDMETHODCALLTYPE Shutdown(IUnknown *in_pUnknown)
{
// Add your cleanup code here
MessageBox(NULL,_T("conmanclient2 exited"),_T("conmanclient exited"),0);
return 0;
}
// Must implement members from IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
return 0;
}
ULONG STDMETHODCALLTYPE AddRef( void)
{
return InterlockedIncrement(&ref);
}
ULONG STDMETHODCALLTYPE Release( void)
{
if(InterlockedDecrement(&ref) == 0)
{
delete this;
return 0;
}
return ref;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// Load the Device Agent Transport Library
HINSTANCE hmod;
hmod = LoadLibrary(L"DeviceAgentTransport.dll");
// Get an instance of IDeviceAgentTransport
GetDeviceAgentTransportFunc f1 = (GetDeviceAgentTransportFunc)
::GetProcAddress(hmod, L"GetDeviceAgentTransport");
IDeviceAgentTransport *pTransport = NULL;
f1(&pTransport);
// Register the callback with the Device Agent Transport
MyShutdownCallback *shutdownCallback = new MyShutdownCallback();
pTransport->RegisterShutdownCallback(shutdownCallback,shutdownCallback);
// Let the desktop application know that this remote agent was deployed successfully
// and that this remote agent will handle the supplied list of services.
LPCOLESTR szServiceIds[] = {L"F85E57BA-5AE9-4FF7-8433-6AB7D991D033"};
pTransport->AcknowledgeLaunch(1, szServiceIds);
// Open a communcation stream with desktop application on the service.
IDevicePacketStream *pStream = NULL;
pTransport->AcceptConnectionEx(szServiceIds[0], &pStream);
// Get an instance of IPacket
GetNewPacketFunc f2 = (GetNewPacketFunc) :: GetProcAddress(hmod, L"GetNewPacket");
IPacket *pPacket = NULL;
f2(&pPacket);
// Write a message and sent the packet.
pPacket->WriteBool(true);
pPacket->WriteByte(0xff);
pPacket->WriteChar('c');
pPacket->WriteInt32(1024);
pPacket->WriteString(L"Hello Desktop Computer");
pStream->Write(pPacket);
// Check for a packet while communication stream is connected.
f2(&pPacket);
VARIANT_BOOL connected;
pStream->IsConnected(&connected);
while(connected)
{
pStream->IsConnected(&connected);
VARIANT_BOOL available;
// If a packet is found, display the string.
pStream->IsPacketAvailable(&available);
if(available)
{
pStream->Read(&pPacket);
VARIANT_BOOL endofpacket;
pPacket->IsEndOfPacket(&endofpacket);
while (!endofpacket)
{
pPacket->IsEndOfPacket(&endofpacket);
DataTypeEnum datatype;
pPacket->ReadDataType(&datatype);
switch (datatype)
{
case DT_BYTE:
BYTE byteValue;
pPacket->ReadByte(&byteValue);
break;
case DT_INT32:
INT32 intValue;
pPacket->ReadInt32(&intValue);
break;
case DT_WIDECHAR:
wchar_t charValue;
pPacket->ReadChar(&charValue);
break;
case DT_BOOL:
VARIANT_BOOL boolValue;
pPacket->ReadBool(&boolValue);
break;
case DT_BYTEARRAY:
BYTE * buffer[100];
ULONG length;
pPacket->ReadBytes(buffer,&length);
break;
case DT_STRING:
LPWSTR string;
pPacket->ReadString(&string);
MessageBox(NULL, string,string,0);
break;
default:
break;
}
};
}
};
return 0;
}
관리되는 동등 항목
Microsoft.SmartDevice.DeviceAgentTransport.IPacket
요구 사항
DeviceAgentTransport.h