La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Utilizzare le API di connettività con .NET Compact Framework

Presentazioni simili


Presentazione sul tema: "Utilizzare le API di connettività con .NET Compact Framework"— Transcript della presentazione:

1

2 Utilizzare le API di connettività con .NET Compact Framework
Marco Frontini Fabio Santini

3 Agenda Utility P/Invoke per le API di connettività
La classe MessageWindows API per la gestione degli SMS e delle chiamate Comunicazioni IrDA Intercettare un SMS Bluetooth in Windows Mobile 2003 con lo Smart Device Framework 1.3 Connection Manager Nuove api del CF 2.0 per la gestione degli SMS, Phone , Bluetooth Notification Broker

4 Utility utili  vxUtil – Network/Internet
vxIpConfig – con release/renew vxSnmp – read/update value SNMP vxSniffer – Network monitor PocketHost –

5 Chiamare codice unmanaged P/Invoke (C#)
Utilizzare platform invoke (P/Invoke) per chiamare codice unmanaged dichiarare la dll esterna tramite l’attributo DllImport segnare il metodo come “static extern” chiamare il metodo normalmente possono essere chiamate solo DLL non COM Namespace DllImport using System.Runtime.InteropServices; public class DoStuff { [DllImport("coredll.dll")] public static extern int SetCursor(int cursorHandle); public void Warp(int handle) SetCursor(handle); } rendere l’API disponibile chiamata

6 Gestione degli errori DllImport può rendere gli errori Win32 disponibili Impostare SetError a True per mappare gli errori Win32 chiamare Marshal.GetLastWin32Error using System.Runtime.InteropServices; public class DoStuff { [DllImport("coredll.dll", SetLastError = True)] public static extern int SetCursor(int cursorHandle); public void Warp(int handle) SetCursor(handle); if (Marshal.GetLastWin32Error() != 0) // handle error } mappare gli errori chiamata Controllo errore

7 Supporto al marshalling di .NET CF
CF supporta solo i tipi base marshalling by-value molto limitato deve essere un 32 bits (4 bytes) o meno deve essere un integral marshalling by-reference richiesto per molti tipi richiede un puntatore nel metodo Win32 CF automaticamente ‘blocca’ i parametri si assicura che il garbage collector non liberi quella memoria classi e strutture presentano differenti problematiche spesso è richiesto un marshalling manuale

8 User Defined Value Type
Marshalling CF Type C# Type VB Type Win32 Type ByVal ByRef Boolean bool BYTE Yes Yes (*) Int16 short Short SHORT Int32 int Integer INT32 Int64 long Long INT64 Byte byte Char char WCHAR Single float FLOAT No Double double DOUBLE String string WCHAR * StringBuilder User Defined Value Type struct Structure struct or class class Class Array of Value Type T[ ] T( ) T*/T[ ]

9 Lavorare con i messaggi Windows
La maggior parte dell API richiede l’uso di un window handle I window handles (HWND) sono al centro dell’architettura di Windows L’implementazione dei controlli del CF previene l’uso di messaggi personalizzati nessun accesso al sistema interno di gestione dei messaggi nessun accesso a HWND nessuna personalizzazione del comportamento e’ necessaria una classe speciale per gestire i messaggi Microsoft.WindowsCE.Forms.MessageWindow

10 MessageWindow MessageWindow incapsula le funzionalità dei messaggi di windows La proprietà Hwnd è il window handle si può fare l’override della WndProc per processare i messaggi riceve i messaggi in una struttura chiama la WndProc base per ottenere il comportamento di default metodi statici usati per send/post MessageWindow.SendMessage MessageWindow.PostMessage

11 MessageWindow class personalizzata
public class MyMessageWin : MessageWindow { const int WM_USER = 1024; public const int WM_DOWORK + 1; protected override void WndProc(ref Message m) base.WndProc (ref m); if (m.Msg == WM_DOWORK) // m.WParam & m.LParam }

12 Usare la MessageWindow class
public void DoWork() { MyMessageWin _theWin = new MyMessageWin(); IntPtr longVal = new IntPtr(100); Message m = Message.Create(_theWin.Hwnd, _theWin.WM_DOWORK, IntPtr.Zero, longVal); MessageWindow.SendMessage(ref m); } crea un istanza Si utilizzano sempre gli IntPtr handle message values invio del messaggio

13 MessageWindows

14 Irda Comunicazione tra dispositivi, stampanti (specialmente nei centri commerciali ) e ActiveSync Discovering dei dispositivi nel raggio d’azione

15 Demo IrDA

16 Short Message Service (SMS)
Usato per messaggi corti Capacità di concatenare messaggi API Text – SMS API (sms.h) per inviare Text – Inbox Rule per intercettare i messaggi Dopo un esempio con Fabio (CF 2.0)

17 SMS API Send Text Message
Low level API under all other SMS services SMS_HANDLE hsms = NULL; hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &hsms, 0); SMS_ADDRESS smsaAddress; smsaAddress.smsatAddressType = SMSAT_INTERNATIONAL; wcscpy(smsaAddress.ptsAddress, pszName); TEXT_PROVIDER_SPECIFIC_DATA tpsData; tpsData.psMessageClass = PS_MESSAGE_CLASS1; psData.psReplaceOption = PSRO_NONE; hr = SmsSend(hsms, NULL, &smsaAddress, NULL, (BYTE*) pszMsg, wcslen(pszMsg) * sizeof(WCHAR), (BYTE*) &tpsData, sizeof(tpsData), SMSDE_OPTIMAL, SMS_OPTION_DELIVERY_NONE, &smsmidMessageID) hr = SmsClose(hsms);

18 Classe Managed per SMS e Phone

19 Inbox Rule Client Ricezione di SMS
Application Inbox Application Inbox Application SMS Transport Rule 1 DLL Rule 1 DLL Rule 1 DLL Rule 2 DLL Your Rule DLL

20 La nostra DLL Inbox Rule Client Recupera il Body del Messaggio
E’ il messaggio che vogliamo? L’applicazione è in esecuzione? Si Si Passa il body all’applicazione utilizzando vari sistemi No No Esegue l’applicazione Lo lascia andare verso la Inbox

21 Intercettare i messaggi SMS +14250010001 !!!!

22 Bluetooth Bluetooth Corto raggio (100 metri max)
Massimo 16 dispositivi 1 Mbps Peer to peer Autenticazione e Cripting

23 Le API Bluetooth Le API dei dispositivi
BthSetMode() BthGetMode() API per la gestione delle porte COM Utilizzare Winsock Utilizzare le interfaccie grafiche standard

24 Le API Bluetooth int BthSetMode( DWORD dwMode )
Imposta la modalità Bluetooth int BthGetMode( DWORD* pdwMode ) Recupera la modalità corrente del Bluetooth Modalità BTH_POWER_OFF BTH_CONNECTABLE BTH_DISCOVERABLE

25 Connection Manager Connessione “intelligente”
Network based vs. Connection based Ogni CSP ha un suo criterio di connessione costo, larghezza di banda, latenza, tempo di connessione, etc. Posso essere aggiunti altri CSP Configurazioni predefinite Impostate dai carrie o dalle aziende Planner Connection Manager Connection Service Providers Voice RAS Proxy PPTP GPRS etc

26 Connection Manager Il Connection Manager sostituisce le RAS API
Gestisce l’intero processo di connessione Le connessioni sono dichiarate a seconda della destinazione (Internet o Corporate Network) Il Connection manager gestisce connessioni che prevedono più “salti” Esempio di connessione ad una rete corporate: il connection manager attiva la connessione GPRS verso internet e in seguito attiva la connessione PPTP verso l’azienda. Connection manager può utilizzare l’opzione “desktop pass through” attraverso Active Sync.

27 UI del Connection Manager Connection Manager Engine
Applicazione UI del Connection Manager XML Provisioning Document URL Mapper Planner Connection Manager Engine Configuration Manager Voice RAS Proxy PPTP GPRS etc

28 Connection Manager ConnMgrEstablishConnection() ConnMgrMapURL()
Determina la destinazione corretta a seconda dell’URL che viene utilizzato E’ importante usare questa API per stabilire se la connessione è internet o intranet ConnMgrEstablishConnection() Utilizzata per stabilire la connessione Gestisce gli handle durante tutta la connessione ConnMgrEstablishConnectionSync()

29 Connection Manager ConnMgrReleaseConnection()
Chiude la connessione ConnMgrConnectionStatus() Determina lo stato della connessione Notifica cambiamenti attraverso eventi o messaggi windows Controllare lo stato per determinare una eventuale disconnessione

30 Connection Manager

31 Phone.Talk Dim phone As New Phone phone.Talk( “ ” ) Proprietà e eventi recuperabili tramite State & Notification Broker

32 E-Mail e SMS SmsMessage msg = new SmsMessage();
msg.To.Add( new Recipient(“ ")); msg.Body = “Ciao Nello !"; msg.Send();

33 Contact != Recipient Contact myCustomer; // ...
Message msg = new Message(); msg.To.Add( myCustomer ); // Non Compila msg.To.Add( new Recipient( myCustomer. 2Address ) ); // OK

34 SMS/Email: interazione con l’utente
Compose Form Visualizzazione Inbox Sincronizzare

35 Intercept SMS MessageInterceptor sms; void Form_Load( ... ) {
sms = new MessageInterceptor(); //... Proprietà opzionali sms.MessageReceived += new EventHandler(sms_MessageReceived); } void sms_MessageReceived(...) //... Arrivato messaggio !!!

36 Che ne faccio del messaggio ?
MessageInterceptor sms; void Form_Load( ... ) { sms = new MessageInterceptor(); sms.InterceptionAction = InterceptionAction.NotifyAndDelete; sms.MessageReceived += new EventHandler(sms_MessageReceived); } void sms_MessageReceived(...) //... Handle incoming message

37 Bluetooth in Windows Mobile 5.0
Utilizza la UI per fare il “pairing” Un dispositivo pubblica il servizio New BluetoothService( GUID ) Un dispositivo cerca i servizi GetPairedDevices() E si connette tramite il GIUD BluetoothDevice.Connect( GUID ) A quel punto si ottiene un NetworkStream da utilizzare per trasferire i dati

38 Nuove classi Windows Mobile 5.0 SMS e Phone

39 Gestione dello stato Microsoft.WindowsMobile.Status
Nuovo State and Notification Broker Accesso allo stato di sistema e delle applicazioni Supporta la notifica delle modifiche dello stato Recupera e aggiorna i dettagli sui vari stati Condivide lo stato tra più applicazioni Oggi esiste ma è un casino  Sono voci di registro che cambiano costantemente

40 Stati predefiniti Più di 140 stati predefiniti Appuntamenti Hardware
aggiunta, modifica, conflitti, etc. Hardware Camera, tastiera, cradle, headset, car kit Messaggi , SMS, MMS, voice, ActiveSync Phone Profili, chiamate, segnale, GPRS, log

41 La classe SystemState SystemState gestisce gli stati predefiniti
RegistryState supporta stati custom

42 Condizioni sugli stati
Può restringere la notifica applicando delle condizioni Confronto tra I valori di uno stato Di default usa AnyChange

43 Tipi di notifica Notifica temporanea Notifica persistente
L’applicazione viene notificata quando è in esecuzione Viene chiamato un event handler Si perde dopo un reset Notifica persistente L’applicazione viene eseguita se non è già in esecuzione Usa i parametri a riga di comando Rimane dopo un soft reset

44 Notification Broker

45 © 2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY. Content created by 3 Leaf Solutions


Scaricare ppt "Utilizzare le API di connettività con .NET Compact Framework"

Presentazioni simili


Annunci Google