# PvaClientPutGetGet

pvaClientPutGet is a synchronous wrapper for the pvAccess::ChannelPutGet API, which is a callback based API. Thus it is easier to use than pvAccess::ChannelPut itself.

NOTE: Except for union fields pvaClientPutGet takes care of modifying the bitSet associated with the data sent to the server.

An instance of PvaClientPutGet is created via a call to one of the followimg:

    class PvaClientChannel
    ...
    {
    ...
        PvaClientPutGetPtr createPutGet(std::string const & request);
        PvaClientPutGetPtr createPutGet(epics::pvData::PVStructurePtr const &  pvRequest);
    ...
    };
    An instance of PvaClientPutGet connects to a single channel.
    PvaClientPutGet has both synchronous methods, which block, and non blocking methods.

    PvaClientPutGet has methods:

    connect             calls issueConnect and then waitConnect.
    issueConnect        issues a request to the server to create the server side of ChannelPut.
    waitConnect         blocks until server responds that it has created the ChannelPut.
    putGet              call issuePutGet and then waitPutGet.
    issuePutGet         issue a putGet and return immediately.
    waitPutGet          wait until putGet completes.
    getGet              calls issueGetGet and then waitGetGet.
    issueGetGet         issues a request to the server to get the latest data for the get data.
    waitGetGet          waits until the server send a message that the getGet is complete.
    getPut              calls issueGetPut and then waitGetPut.
    issueGetPut         issues a request to the server to get the latest data for the put data.
    waitGetPut          waits until the server send a message that the getPut is complete.
    getPutData          get the put portion of the data.
    getGetData          get the get portion of the data.

    issueConnect, issuePutGet,  issueGetGet  and issueGetPut do not block.
    All other methods can block.