Freigeben über


IPacket

Aktualisiert: November 2007

Enthält Daten und wird von Objekten verwendet, die IDevicePacketStream zum Übertragen von Daten zwischen einer Geräte-Agent-Anwendung und einem Desktopcomputer implementieren.

IPacket : public IUnknown

Methoden

Methode

Beschreibung

IPacket::get_Count

Ruft die Gesamtanzahl der Datenobjekte im Paket ab.

IPacket::IsEndOfPacket

Überprüft, ob der interne Iterator das Ende des Pakets erreicht hat.

IPacket::ReadBool

Liest einen booleschen Wert aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::ReadByte

Liest ein Byte aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::ReadBytes

Liest ein Bytearray aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::ReadInt32

Liest eine ganze Zahl aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::ReadChar

Liest ein Zeichen aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::ReadDataType

Gibt den Datentyp des aktuellen Objekts im Paket als Enumerationswert zurück.

IPacket::ReadString

Liest eine Zeichenfolge aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket.

IPacket::Reset

Setzt den internen Iterator des Pakets zurück, um auf das erste Datenobjekt im Paket zu verweisen. Beim nächsten Lesevorgang wird das erste Datenobjekt im Paket gelesen.

IPacket::WriteBool

Schreibt einen booleschen Wert in das Objekt.

IPacket::WriteByte

Schreibt ein Byte in das Objekt.

IPacket::WriteBytes

Schreibt ein Bytearray in das Objekt.

IPacket::WriteChar

Schreibt ein Zeichen in das Objekt.

IPacket::WriteInt32

Schreibt eine ganze Zahl in das Objekt.

IPacket::WriteString

Schreibt eine Zeichenfolge in das Objekt.

Hinweise

Um ein Objekt abzurufen, durch das diese Schnittstelle implementiert wird, verwenden Sie GetNewPacket.

Objekte, durch die diese Schnittstelle implementiert wird, können nur Objekte vom Typ byte, byte[], string, int und char enthalten. Sie ist nicht zum Lesen und Schreiben benutzerdefinierter Objekte erweiterbar. Benutzer können jedoch weiterhin benutzerdefinierte Objekte mit dem Stream übertragen, indem Sie entweder den benutzerdefinierten Datentyp in elementare Datentypen unterteilen oder die benutzerdefinierten Datentypen in ein Bytearray serialisieren.

Beispiel

Im folgenden Beispiel wird eine Geräte-Agent-Anwendung dargestellt, durch die ein Paket auf den Desktop geschrieben und ein Paket vom Desktop gelesen wird.

#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;
}

Verwaltete Entsprechung

Microsoft.SmartDevice.DeviceAgentTransport.IPacket

Anforderungen

DeviceAgentTransport.h

Siehe auch

Weitere Ressourcen

Nicht verwaltete geräteseitige Device Connectivity-API für intelligente Geräte