Partager via


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

IPacket::get_Count

Obtient le nombre total d'objets de données dans le paquet.

IPacket::IsEndOfPacket

Vérifie si l'itérateur interne a atteint la fin du paquet.

IPacket::ReadBool

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.

IPacket::ReadByte

Lit un octet à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet.

IPacket::ReadBytes

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.

IPacket::ReadInt32

Lit un entier à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet.

IPacket::ReadChar

Lit un caractère à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet.

IPacket::ReadDataType

Retourne le type de données de l'objet actuel dans le paquet en tant que une valeur d'énumération.

IPacket::ReadString

Lit une chaîne à partir de l'objet et pointe l'itérateur interne vers l'objet de données suivant dans le paquet.

IPacket::Reset

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.

IPacket::WriteBool

Écrit une valeur booléenne dans l'objet.

IPacket::WriteByte

Écrit un octet dans l'objet.

IPacket::WriteBytes

Écrit un tableau d'octets dans l'objet.

IPacket::WriteChar

Écrit un caractère dans l'objet.

IPacket::WriteInt32

Écrit un entier dans l'objet.

IPacket::WriteString

É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