PreEmptive Analytics Win32 Client
 All Classes Files Functions Variables Typedefs Macros
PreEmptive Analytics Win32 Client Documentation


This is the documentation for the PreEmptive Analytics Client for the Windows Win32 API.It is designed to support clients running Windows XP SP2 and up.

PAClient Usage Pattern

The general usage pattern is:

Message Queuing and Transmission

Messages are not immediately sent to the endpoint. The PAClient queues messages and send them when either a certain amount of time has elapsed or a number of messages have accumulated. In cases where transmission may have performance impact the transmission of messages can be controlled by the client program itself. Messages need not be sent in chronological order. The endpoint re-orders messages as part of its processing. Likewise, paired messages such as PAClient::FeatureStart() and PAClient::FeatureStop() may not be sent to the server as part of the same transmission. Message transmission is not guaranteed and messages may be lost. In cases of forced application shutdown or storage limitations the PAClient may not be able to transmit queued message or to store them for off-line transmission.

Off-line Storage

The client application is not required to always have network connectivity. Client programs can configure the PAClient to either always store the messages locally or to store them when contact with the server is not possible. The PAClient will automatically transmit these locally stored messages to the server when connectivity has been restored. When the client program limits the amount of off-line storage it can use messages will be discarded starting with the oldest data first.

Multithreaded Use

The PAClient supports requests from multiple threads. The PAClient quickly handles the incoming requests and trys not to block the calling thread. The transmission of newly generated messages and stored messages takes place on background threads.


The PAClient can be implemented in multiple languages that are used in a single application. The client application determines which language will control the application start/stop boundary and inform the other PAClient implementation that it is running in a subordinate role. The PAClient does does not support combined message transmission or offline storage, nor the correlation of PAClient::FeatureStart() and PAClient::FeatureStop()s that cross language boundaries.

C++ Interface

The PAClient is a C++ class consisting of methods used to send analytics messages. Other classes such as Configuration, BinaryInfo, ExtendedKeys, and FlowController need to be created and destoryed by the client program. The PAClient does not automatically free any of these instances. Instances passed to PAClient methods will make local copies of these instances. For example, the Configuration instance passed to PAClient::ApplicationStart() is copied and changes made to the instance will not be reflected in the behavior of the running PAClient.

To use any of these classes you only need to include PAClient.h.

C Interface

Most methods of the PAClient are available as C functions. Create and Delete methods are provided for classes such as Configuration. References to these instances are replaced by void pointers. The primary use of these functions is to allow for the integration of the PAClient into higher level languages such as C#:

[DllImport("pawin32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr CreateConfiguration();
[DllImport("pawin32.dll", CharSet = CharSet.Unicode)]
public static extern void DeleteConfiguration(IntPtr native);

To use the C interface you only need to include C_PAClient.h.