Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serverinitiierte Synchronisation » C-API des MobiLink Listeners für Palm-Geräte

 

PalmLsnSpecialLaunch-Methode

Beantwortet Startcodes, die geräteabhängig sein können.

Syntax
Err PalmLsnSpecialLaunch(
    UInt16 		cmd,
    MemPtr 		cmdPBP,
    UInt16		launchFlags
)
Parameter
  • cmd   Der Code für den Palm OS-Anwendungsstart.

  • cmdPBP   Ein Zeiger auf eine Struktur, die Startcodeparameter enthält. Wenn Ihre Anwendung keine Parameter für den Startbefehl besitzt, ist dieser Wert NULL.

  • launchFlags   Optionen, die Statusinformationen für Ihre Anwendung bereitstellen.

Rückgabe

Ein Palm OS-Fehlercode. Der Code errNone zeigt Erfolg an.

Bemerkungen

Diese Methode beantwortet geräteabhängige oder Standard-Startcodes, die nicht als sysAppLaunchCmdNormalLaunch festgelegt sind.

Beispiel

Das folgende Beispiel für die Treo 6035 Smartphone-Implementierung verwendet PalmLsnSpecialLaunch für die Verarbeitung von Listener-Ereignissen:

Err PalmLsnSpecialLaunch( UInt16 cmd, MemPtr cmdPBP, UInt16 /*launchFlags*/ ) {
    switch(cmd) {
        case sysAppLaunchCmdSystemReset:
            // Fall through
        case sysAppLaunchCmdSyncNotify:
            // Fall through
        case phnLibLaunchCmdRegister:
            return registerListener();
        case phnLibLaunchCmdEvent: {
            if (!IsFeatureOn(PalmLsnGetFeature(), Listening)) {
                return(errNone);
            }
            PhnEventPtr phoneEventP = (PhnEventPtr) cmdPBP;
            if (phoneEventP->eventType == phnEvtMessageInd) {
                return(handleMessage(phoneEventP->data.params.id, &phoneEventP->acknowledge));
            }
        }
        default:
            break;
    }
    return(errNone);
}

Wenn eine Nachricht entdeckt wird, verarbeitet handleMessage die Nachricht mit der geeigneten Aktion.

static Err handleMessage( PhnDatabaseID id, Boolean * handled )
/*************************************************************/
// This routine will construct a_palm_msg and then call
// PalmLsnProcess to process it.
{
    a_palm_msg *     ulMsg;
    Err              ret;
    Boolean          newlyLoaded;
    PhnAddressList   addrList;
    PhnAddressHandle addrH;
    MemHandle        msgBodyH;
    Char *           msgSender;
    Char *           msgBody;
    UInt32           msgTime;
    Char             configDb[ dmDBNameLength ];
    UInt16           libRef = 0;

    // CDMA workaround recommended by Handspring
    DmOpenRef        openRef = 0;

    *handled = false;

    // Allocate a message structure for passing over
    // to PalmLsnProcess later
    ulMsg = PalmLsnAllocate();
    if (ulMsg == NULL) {
        return(sysErrNoFreeRAM);
    }

    // Load the phone library   
    ret = findOrLoadPhoneLibrary(&libRef, &newlyLoaded);
    if (ret != errNone) {
        goto done;
    }
    openRef = PhnLibGetDBRef(libRef);

    // Retrieve sender of the message    
    ret = PhnLibGetAddresses(libRef, id, &addrList);
    if (ret != errNone) {
        goto done;
    }
    ret = PhnLibGetNth(libRef, addrList, 1, &addrH);
    if (ret != errNone) {
        PhnLibDisposeAddressList(libRef, addrList);
        goto done;
    }
 
    msgSender = PhnLibGetField(libRef, addrH, phnAddrFldPhone);
    if (msgSender != NULL) {
        ret = PalmLsnDupSender(ulMsg, msgSender);
        MemPtrFree(msgSender);
    }
    PhnLibDisposeAddressList( libRef, addrList );
    if (ret != errNone) {
        goto done;
    }
 
    // Retrieve message time    
    ret = PhnLibGetDate(libRef, id, &msgTime);
    if (ret != errNone) {
        goto done;
    }
    ret = PalmLsnDupTime(ulMsg, msgTime);
    if (ret != errNone) {
        goto done;
    }

    // Retrieve the entire message body  
    ret = PhnLibGetText(libRef, id, &msgBodyH);
    if (ret != errNone) {
        goto done;  
    }
    msgBody = (Char *) MemHandleLock(msgBodyH);
    ret = PalmLsnDupMessage(ulMsg, msgBody);
 
    // msgBodyH must be disposed of by the caller
    MemHandleUnlock(msgBodyH);
    MemHandleFree(msgBodyH);
    if (ret != errNone) {
        goto done;
    }

    // Get the configuration database name
    PalmLsnGetConfigFileName(configDb);

    // Call PalmLsnProcess to process the message
    ret = PalmLsnProcess(ulMsg, configDb, NULL, handled);

done:
    if (ulMsg != NULL) {
        PalmLsnFree(ulMsg);
    }
    PhnLibReleaseDBRef(libRef, openRef);

    // Unload the phone library before any possible application switch  
    if (newlyLoaded) {
        unloadPhoneLibrary(libRef);
        newlyLoaded = false;
    }
    return(ret);
}