IPacket
Mise à jour : novembre 2007
Contient des données et est utilisé par les objets qui implémentent IDevicePacketStream pour transférer des données entre une application d'agent Smart Device et un ordinateur de bureau.
IPacket : public IUnknown
Méthodes
Méthode |
Description |
---|---|
Obtient le nombre total d'objets de données dans le paquet. |
|
Vérifie si l'itérateur interne a atteint la fin du paquet. |
|
Lit une valeur booléenne à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Lit un octet à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Lit un tableau d'octets à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Lit un entier à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Lit un caractère à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Retourne le type de données de l'objet actuel dans le paquet en tant que une valeur d'énumération. |
|
Lit une chaîne à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet. |
|
Réinitialise l'itérateur interne du paquet pour pointer sur le premier objet de données dans le paquet. L'opération de lecture suivante lit le premier objet de données dans le paquet. |
|
Écrit une valeur booléenne dans l'objet. |
|
Écrit un octet dans l'objet. |
|
Écrit un tableau d'octets dans l'objet. |
|
Écrit un caractère dans l'objet. |
|
Écrit un entier dans l'objet. |
|
Écrit une chaîne dans l'objet. |
Notes
Pour obtenir un objet qui implémente cette interface, utilisez GetNewPacket.
Les objets qui implémentent cette interface peuvent contenir uniquement les objets de type byte, byte[], string, int et char. Ce n'est pas extensible aux objets personnalisés en lecture et en écriture. Toutefois, les utilisateurs peuvent toujours transférer des objets personnalisés à travers le flux de données en fractionnant le type de données personnalisé en types de données de base ou sérialisant les types de données personnalisés en un tableau d'octets.
Exemple
L'exemple suivant est une application d'agent Smart Device qui écrit un paquet sur l'ordinateur de bureau et lit un paquet à partir de celui-ci.
#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;
}
Équivalent managé
Microsoft.SmartDevice.DeviceAgentTransport.IPacket
Configuration requise
DeviceAgentTransport.h
Voir aussi
Autres ressources
API de connectivité des appareils de type Smart Device côté appareil non managée