Поделиться через


IPacket - интерфейс

Обновлен: Ноябрь 2007

Содержит данные и используется объектами, которые реализуют методы интерфейса IDevicePacketStream для передачи данных между приложением агента устройства и настольным компьютером.

Пространство имен:  Microsoft.SmartDevice.DeviceAgentTransport
Сборка:  Microsoft.SmartDevice.DeviceAgentTransport (в Microsoft.SmartDevice.DeviceAgentTransport.dll)

Синтаксис

'Декларация
<GuidAttribute("2F6015CC-2710-4AA1-9408-EAD056B555E1")> _
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IPacket
'Применение
Dim instance As IPacket
[GuidAttribute("2F6015CC-2710-4AA1-9408-EAD056B555E1")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPacket
[GuidAttribute(L"2F6015CC-2710-4AA1-9408-EAD056B555E1")]
[InterfaceTypeAttribute(ComInterfaceType::InterfaceIsIUnknown)]
public interface class IPacket
public interface IPacket

Заметки

Для получения объекта, реализующего данный интерфейс, используется метод PacketFactory.GetNewPacket.

Объекты, реализующие интерфейс IPacket, могут содержать только объекты типа byte, byte[], string, int и char. Интерфейс нельзя расширить для чтения и записи пользовательских объектов. Однако пользователи могут по-прежнему передавать пользовательские объекты через поток либо посредством разбиения пользовательского типа данных на базовые типы данных, либо посредством сериализации пользовательских типов данных в массив байтов.

Примеры

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.SmartDevice.DeviceAgentTransport
Imports System.Windows.Forms


Class Program

    <MTAThread()>  _
    Shared Sub Main(ByVal args() As String) 
        Dim serviceids(0 To 0) As String
        serviceids(0) = "2FAD740C-B5D3-4ad0-BE23-5682503584BF"

        ' Get an instance of Device Agent Transport
        Dim transport As IDeviceAgentTransport = _
            DeviceAgentTransportFactory.GetAgentTransport()
        ' Register the callback object with the Device Agent Transport.
        Dim shutdownCallback As New ShutdownCallback()
        transport.RegisterShutdownCallback(shutdownCallback, shutdownCallback)
        ' Let the desktop application know that this device agent was deployed successfully 
        ' and will handle the supplied list of service IDs.
        transport.AcknowledgeLaunch(Convert.ToUInt32(serviceids.Length), serviceids)

        ' Open a communcation stream with desktop application on the service.
        Dim packetStream As IDevicePacketStream
        transport.AcceptConnectionEx(serviceids(0), packetStream)
        Dim packet As IPacket

        ' Check for a packet while communication stream is connected.
        While packetStream.IsConnected()
            ' If a packet is found, display the string and integer data.
            If packetStream.IsPacketAvailable() Then
                packetStream.Read(packet)
                Dim sb As New StringBuilder()
                While Not packet.IsEndOfPacket()
                    Select Case packet.ReadDataType()
                        Case DataType.BoolType
                            Dim boolValue As Boolean = packet.ReadBool()
                        Case DataType.ByteArrayType
                            ' Read bytes and convert IntPtr to byte[]
                            Dim ptr As IntPtr
                            Dim size As System.UInt32 = 0
                            packet.ReadBytes(ptr, size)
                            Dim buffer As Byte() = InteropUtils.ConvertIntPtrToByteArray(ptr, _
                                Convert.ToInt32(size))
                        Case DataType.ByteType
                            Dim byteValue As Byte = packet.ReadByte()
                        Case DataType.CharType
                            Dim charValue As Char = packet.ReadChar()
                        Case DataType.Int32Type
                            sb.Append("Int32Type:  " + packet.ReadInt32().ToString() + _
                                      vbCr + vbLf)
                        Case DataType.StringType
                            sb.Append("String:  " + packet.ReadString() + vbCr + vbLf)
                        Case Else
                    End Select
                End While
                MessageBox.Show(sb.ToString())
                Exit While
            End If
            System.Threading.Thread.Sleep(1000)
        End While
        packet = PacketFactory.GetNewPacket()

        ' Write the version of .NET Compact Framework into the packet.
        packet.WriteString("Hello Desktop Computer")
        packet.WriteInt32(Environment.Version.Major)
        packet.WriteInt32(Environment.Version.Minor)
        packet.WriteInt32(Environment.Version.Build)
        packet.WriteInt32(Environment.Version.Revision)

        ' Pass the packet to desktop application.
        packetStream.Write(packet)

    End Sub 'Main
End Class 'Program

' Define your own shutdown implementation
Class ShutdownCallback
    Implements IAgentTransportShutdownCallback

    Sub Shutdown(ByVal in_pUnknown As Object) _
        Implements IAgentTransportShutdownCallback.Shutdown

        ' Insert cleanup code here

    End Sub 'Shutdown
End Class 'ShutdownCallback
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SmartDevice.DeviceAgentTransport;
using System.Windows.Forms;

class Program
{
    [MTAThread]
    static void Main(string[] args)
    {
        string[] serviceids = { "2FAD740C-B5D3-4ad0-BE23-5682503584BF" };

        // Get an instance of Device Agent Transport
        IDeviceAgentTransport transport = DeviceAgentTransportFactory.GetAgentTransport();

        // Register the callback object with the Device Agent Transport.
        ShutdownCallback shutdownCallback = new ShutdownCallback();
        transport.RegisterShutdownCallback(shutdownCallback, shutdownCallback);

        // Let the desktop application know that this device agent was deployed successfully 
        // and will handle the supplied list of service IDs.
        transport.AcknowledgeLaunch(Convert.ToUInt32(serviceids.Length), serviceids);

        // Open a communcation stream with desktop application on the service.
        IDevicePacketStream packetStream;
        transport.AcceptConnectionEx(serviceids[0], out packetStream);

        IPacket packet;

        // Check for a packet while communication stream is connected.
        while (packetStream.IsConnected())
        {
            // If a packet is found, display the string and integer data.
            if (packetStream.IsPacketAvailable())
            {
                packetStream.Read(out packet);
                StringBuilder sb = new StringBuilder();
                while (!packet.IsEndOfPacket())
                {
                    switch (packet.ReadDataType())
                    {
                        case DataType.BoolType:
                            bool boolValue = packet.ReadBool();
                            break;
                        case DataType.ByteArrayType:
                            // Read bytes and convert IntPtr to byte[]
                            IntPtr ptr;
                            uint size = 0;
                            packet.ReadBytes(out ptr, out size);
                            byte[] buffer = InteropUtils.ConvertIntPtrToByteArray(ptr, 
                                Convert.ToInt32(size));
                            break;
                        case DataType.ByteType:
                            byte byteValue = packet.ReadByte();
                            break;
                        case DataType.CharType:
                            char charValue = packet.ReadChar();
                            break;
                        case DataType.Int32Type:
                            sb.Append("Int32Type:  " + packet.ReadInt32().ToString() + "\r\n");
                            break;
                        case DataType.StringType:
                            sb.Append("String:  " + packet.ReadString() + "\r\n");
                            break;
                        default:
                            break;
                    }
                }
                MessageBox.Show(sb.ToString());
                break;
            }
            System.Threading.Thread.Sleep(1000);
        }

        packet = PacketFactory.GetNewPacket();

        // Write the version of .NET Compact Framework into the packet.
        packet.WriteString("Hello Desktop Computer");
        packet.WriteInt32(Environment.Version.Major);
        packet.WriteInt32(Environment.Version.Minor);
        packet.WriteInt32(Environment.Version.Build);
        packet.WriteInt32(Environment.Version.Revision);

        // Pass the packet to desktop application.
        packetStream.Write(packet);
    }
}

// Define your own shutdown implementation
class ShutdownCallback : IAgentTransportShutdownCallback
{
    public void Shutdown(object in_pUnknown)
    {
        // Insert cleanup code here
    }
}

См. также

Ссылки

IPacket - члены

Microsoft.SmartDevice.DeviceAgentTransport - пространство имен