# PvaClientMonitor

NOTE: This is a work in progress.

## Overview

This provides an easier way to create a monitor on a channel than to use pvAccessCPP itself. It provides two main ways to create a monitor:

### The client first creates a PvaClientMonitorChannel and then creates a monitor

The client calls:

    static PvaClientMonitorPtr create(
        PvaClientMonitorPtr const &PvaClientMonitor,
        PvaClientMonitorChannelPtr const & PvaClientMonitorChannel,
        epics::pvData::PVStructurePtr const &pvRequest
    );

    where

    PvaClientMonitor
        The PvaClientMonitor.

    PvaClientMonitorChannel
        The PvaClientMonitorChannel that has already been created by the client.

    pvRequest
        The pvRequest for creating the monitor.

With this method the monitor is created and started. This method blocks while the monitor is created.

### The client provides names for a channel and a provider

The client calls:

    static PvaClientMonitorPtr create(
        PvaClientMonitorPtr const &PvaClientMonitor,
        std::string const & channelName,
        std::string const & providerName,
        std::string const & request,
        PvaClientMonitorChannelStateChangeRequesterPtr const & stateChangeRequester,
        PvaClientMonitorRequesterPtr const & monitorRequester
    );

    where

    PvaClientMonitor
        The PvaClientMonitor.

    channelName
        The name of the channel.

    providerName
        The name of the provider

    request
        The request for creating the monitor

    stateChangeRequester
        The client supplied state change requester.
        This will be called each time a state change for the channel occurs.

    monitorRequester
        The client supplied monitor requester.
        This is called each time a new monitor event is available.

With this method a pvaChannel is created and after it connects a pvaMonitor is created and started. This method never blocks.