Apadmi Symbian Essentials Using Servers Donation Presentation

  • Upload
    symbian

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    1/23

    Apadmi Symbian Essentials

    Using Servers

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    2/23

    Copyright Apadmi Ltd 2009.

    Objectives

    Illustrate importance of client-serverarchitectureLook at some key system serversPlug-in architectures

    Find out how to use a serverClient-side APISessions & subsessionsWorking with asynchronous APIs

    Handles and the Cleanup Stack

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    3/23

    Copyright Apadmi Ltd 2009.

    System Servers

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    4/23

    Copyright Apadmi Ltd 2009.

    Plug-in Architecture

    SocketsServer

    InfraredProtocols TCP/IP

    File ServerLocal FileSystem Flash FilingSystem

    SMS

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    5/23

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    6/23

    Copyright Apadmi Ltd 2009.

    Client-Server Overview

    Session-basedmultiple sessionssubsessions

    Client service API Inter-thread communication Safe

    isolation in separate processmessage passing between client & server

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    7/23

    Copyright Apadmi Ltd 2009.

    Using a simple server

    RCountServSession session;TRequestStatus status;

    User::LeaveIfError(session.Connect());

    _LIT(KTxtLegalString,"224");

    ret = session.SetFromString(KTxtLegalString);

    session.DelayedIncrease(1, 1000000, status);User::WaitForRequest(status);

    session.DecreaseBy(3);

    session.Close();

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    8/23

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    9/23

    Copyright Apadmi Ltd 2009.

    Sessions

    Server thread.

    Client thread

    with two sessions

    Multiple sessions

    Example system with 1 server and 1client thread

    2 client sessions exist within a singlethread

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    10/23

    Copyright Apadmi Ltd 2009.

    Subsessions

    Better (more lightweight) way for asingle client to have multiple logical

    connections with one server

    Server side

    Client side

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    11/23

    Copyright Apadmi Ltd 2009.

    Client-side classes (1)

    Two classes are used to produce clientside APIs

    RSessionBaseRSubSessionBase

    Derived classes must:Create sessions or subsessions as

    appropriate

    Send request messages from the client tothe server

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    12/23

    Copyright Apadmi Ltd 2009.

    Client-side classes (2)

    Create a session withRSessionBase::CreateSession()

    Create a subsession withRSubSessionBase::CreateSubSession()

    Send messages withSend(TInt aFunction,TAny* aPtr)SendReceive(TInt aFunction,TAny*aPtr,TRequestStatus& aStatus)

    SendReceive(TInt aFunction,TAny*aPtr)

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    13/23

    Copyright Apadmi Ltd 2009.

    Client-side DLL

    Client Side API often built as DLL Access services using export library

    File Server: efsrv.libSocket Server: esock.libetc.

    KernelExec

    EUSER

    Client

    Server

    SrvrClient

    DLL

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    14/23

    Copyright Apadmi Ltd 2009.

    Messages (1)

    Clients send messages to servers Each message is a request for a service

    Server processes requestPerforms work on behalf of client(Optionally) sends a reply to the client

    Two types of message:synchronousasynchronous

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    15/23

    Copyright Apadmi Ltd 2009.

    Messages (2)

    Request messages simply consist offive 32-bit numbersA function number (or opcode)Four 32-bit parameters

    Each of the 32-bit parameters can be:An integer, orA pointer to a flat data structure, wrapped

    as a descriptor

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    16/23

    Copyright Apadmi Ltd 2009.

    A real API...

    class RFs : public RSessionBase {}class RFsBase : public RSubSessionBase {}

    class RFile : public RFsBase{public:

    IMPORT_C TInt Open(RFs& aFs, const TDesC&

    aName, TUint aFileMode);IMPORT_C TInt Read(TDes8& aDes) const;IMPORT_C void Read(TDes8& aDes,

    TRequestStatus& aStatus) const;IMPORT_C TInt Write(const TDesC8& aDes);IMPORT_C void Write(const TDesC8& aDes,

    TRequestStatus& aStatus);

    };

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    17/23

    Copyright Apadmi Ltd 2009.

    Implementation Issues

    Beyond the client service API

    A server publishes a client service API This API should be sufficient to enable

    a client to utilise the server effectively

    using an R-class session/subsession But a higher-level API is often desirable

    hide implementation details such asopcodes and package buffers

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    18/23

    Copyright Apadmi Ltd 2009.

    Handling an asynchronous method

    Write an active object, which has anRFile as its service provider

    Handle completion of asynchronousrequests in the active objects RunL()method

    void RFile::Read(TDes8& aDes,TRequestStatus& aStatus) const;

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    19/23

    Copyright Apadmi Ltd 2009.

    Implementation Issues

    Handles & the cleanup stack

    All client-side APIs are derived fromRSessionBaseRSessionBase is derived fromRHandleBase

    Every client-side API is a handle on aserver side session

    You must look after any handles

    Just as you would with pointers

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    20/23

    Copyright Apadmi Ltd 2009.

    Example: handles & the cleanup stack

    The file server session (fs) is protectedagainst leaves during the Connect()and Delete() calls by storing it on thecleanup stack

    void CClass::SomeFunctionL(){RFs fs;CleanupClosePushL(fs);User::LeaveIfError(fs.Connect());User::LeaveIfError(fs.Delete(KSomeFileName));CleanupStack::PopAndDestroy();// fs

    }

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    21/23

    Copyright Apadmi Ltd 2009.

    Summary

    Large number of system serversFundamental Symbian OS architecture Plug-in architecture can provide server

    with extensibility and future-proofing

    Sessions and subsessions Synchronous and asynchronous APIs Higher-level APIs Using the cleanup stack with handles

    (R-classes)

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    22/23

    Copyright Apadmi Ltd 2009.

    End of Using Servers Section

    Next section is File Server and StreamStores

  • 8/14/2019 Apadmi Symbian Essentials Using Servers Donation Presentation

    23/23

    Copyright Apadmi Ltd 2009.

    About Apadmi

    Apadmi is an international mobile consultancy, training anddevelopment company with an excellent reputation for providing

    top quality engineering and training services to the Symbian

    community.

    Our training is undertaken by our Senior Technical Consultants,who have over 10 years of experience running Symbian OS

    training sessions, boot camps and technical workshopsthroughout the world for companies such as Nokia, Symbian,

    Sony Ericsson, Motorola, Siemens, UIQ and Orange.

    For more information please go to :

    http://www.apadmi.com/training.html