Receives responses from daemon on requests sent via EveusbController. Pure abstract class.
Write an inheriting class with the implementation of methods and pass an instance of this class 
to EveusbController::setEventHandler, after that, send requests to daemon via 
EveusbController.
Methods:
● void onError(const std::string &msg);
● long writeToDaemon(const std::string &buf);
● long readFromDaemon(std::vector<char> &buf);
● void onMessage(const std::string &msg, bool incoming);
● void onVersion(const std::string &version);
● void onCompressionHint(bool size_or_speed);
● void onLicense(const License &info);
● void onActivation(const Activation &info, const std::string &error, bool online);
● void onOfflineRequest(const std::string &data);
● void onShareLimitExceeded(Device &dev, int limit);
● void onLocalDeviceTreeEnumerated();
● void onSharedDevicesEnumerated();
● void onRemoteDevicesEnumerated();
● void onServerFound(const std::string &host);
● void onServerDeviceFound(Device &dev);
● void onServerDevicesEnumerated(const std::string &host);
● void onLocalDeviceInfo(const std::string &devname, const DeviceInfo &info);
● void onLocalSharedUnshared(Device &dev, bool shared);
● void onLocalAcquiredReleased(Device &dev, bool acquired);
● void onRemoteConnecting(Device &dev);
● void onRemoteConnected(Device &dev);
● void onRemoteReconnecting(Device &dev);
● void onRemoteDisconnecting(Device &dev);
● void onRemoteDisconnected(Device &dev);
● void onRemoteDeleted(Device &dev);
void onError(const std::string &msg);
Notifies about non-critical errors. There are parse errors, unknown command, bad syntax, etc.
Parameters:
msg - text of error
long writeToDaemon(const std::string &buf);
Call this method to write buf to socket connection established with daemon. Example of
implementation: return write(fd, buf.data(), buf.size());
Parameters:
buf - data that needs to be written to socket
Return:
Returns bytes actually transferred or -1 in case of error.
Note:
See readFromDaemon() to find out why const std::string &buf is used instead of traditional 
(const void *buf, size_t len) arguments.
long readFromDaemon(std::vector<char> &buf);
Call this method to read no more than buf.size() bytes into buf from socket connection
established with daemon.
Example of implementation: return read(fd, &buf[0], buf.size());
Parameters:
buf - buffer to which data from socket will be written
Return:
Returns bytes actually transferred or -1 in case of error.
Remarks:
SWIG forces to use std::vector<char> instead of traditional (void *buf, size_t len) arguments. 
The reason is that SWIG automatically passes std::vector<char> to/from target language, 
you do not need to write typemaps for every language that you will use.
The example of how to deal with (void *buf, size_t len) in Python can be found in 
SWIG documentation, Multi-argument typemaps.
void onMessage(const std::string &msg, bool incoming);
Notifies about messages received from or sent to daemon. Call this method for debug purposes,
etc.
  
Parameters:
  
msg - message 
incoming - true if message is incoming (received from the daemon), false if message is outgoing 
(sent to the daemon) 
Remarks:
  
You should not parse this message and can ignore it.
void onVersion(const std::string &version);
This method is called after invocation of EveusbController::getVersion
Parameters: 
version - сomma-separated values 
the first field - daemon version in format MAJOR.MINOR.RELEASE. 
the second field - version verbose description that includes new line character.
void onCompressionHint(bool size_or_speed);
This method is called after invocation of EveusbController::getCompressionHint
Parameters: 
size_or_speed - current value
void onLicense(const License &info);
This method is called after invocation of EveusbController::getLicense
Parameters: 
info - structure that contains information from the license 
Note: 
see EveusbController::getLicense()
void onActivation(const Activation &info, const std::string &error, bool online);
This method is called after invocation of EveusbController::getLicense or EveusbController::Activate
Parameters:
info - structure that contains information from the license 
error - result of the activation request 
online - true if EveusbController::Activate method was called, false in all other сases
Note:
see EveusbController::getLicense()
void onOfflineRequest(const std::string &data);
This method is called after invocation of EveusbController::getOfflineRequest
Parameters: 
data - data that should be sent to the activation server to request offline activation 
Note: 
see EveusbController::getOfflineRequest()
void onLoglevel(int level);
This method is called if loglevel changed or current value was requested via getLoglevel.
Parameters:
level - constants from syslog: LOG_ERR, LOG_WARNING, ...
void onShareLimitExceeded(Device &dev, int limit);
This method is called if there was an attempt to share a device which couldn’t be shared due
to license limitations. See EveusbController::localShare
  
Parameters:
  
dev - device you tried to share 
limit - max number of devices you can share according to your license
void onLocalDeviceTreeEnumerated();
End of enumeration notifications (no more devices left).
See EveusbController::enumLocalDeviceTree 
void onSharedDevicesEnumerated();
End of enumeration notifications (no more devices left).
See EveusbController::enumSharedDevices 
void onRemoteDevicesEnumerated();
End of enumeration notifications (no more devices left).
See EveusbController::enumRemoteDevices 
void onServerFound(const std::string &host);
Server or devices search notifications. See EveusbController::findServers
Parameters: 
host - address of the detected host
void onServerDeviceFound(Device &dev);
Server or devices search notifications. See EveusbController::findServerDevices
Parameters: 
dev - object corresponding to device found. This object can be used to perform actions on 
the device (connect, disconnect, etc.)
void onServerDevicesEnumerated(const std::string &host);
Server or devices search notifications. End of enumeration notifications (no more devices left).
See EveusbController::findServerDevices 
Parameters: 
host - address of host for which devices were found
void onLocalDeviceInfo(const std::string &devname, const DeviceInfo &info);
Local device notifications. See EveusbController::enumLocalDeviceTree
Parameters:
devname - sys name of device (unique USB device identifier obtained from kernel: 
hub-port[.port ...]) 
info - structure that contains information about device (see above)
void onLocalAddedRemoved(const std::string &devname, int maxchild, const std::string &name, bool added);
Local device notifications. Is called if list of local devices changed (device was plugged into
a USB port/unplugged)
  
Parameters:
  
devname - sys name of device (unique USB device identifier obtained from 
kernel: hub-port[.port ...]) 
maxchild - number of hub ports (= 0 for USB devices, > 0 for hubs) 
name - device name 
added - true if device was connected to a USB port, false if it was disconnected
void onLocalSharedUnshared(Device &dev, bool shared);
Local device notifications. Is called after invocation of EveusbController::localShare,
EveusbController::enumSharedDevices 
Parameters: 
dev - object corresponding to device which was shared or unshared. You can use it to perform 
actions on the device (share, unshare, etc.) 
shared - true if the device was shared, false if it was unshared
void onLocalAcquiredReleased(Device &dev, bool acquired);
Local device notifications. This method is called if client connects to shared device. See
EveusbController::enumSharedDevices 
Parameters: 
dev - object corresponding to shared device. You can use it to perform actions on the device 
(share, unshare, etc.) 
acquired - true if client was connected to the device, false if it was disconnected
void onRemoteConnecting(Device &dev);
Remote device notifications. This method is called when you’re trying to connect to a remote
device. See EveusbController::remoteConnect, EveusbController::enumRemoteDevices 
Parameters: 
dev - object corresponding to device you’re trying to connect to. You can use it to perform 
actions on the device (connect, disconnect, etc.)
void onRemoteConnected(Device &dev);
Remote device notifications. This method is called after connecting to a remote device. See
EveusbController::remoteConnect, EveusbController::enumRemoteDevices 
Parameters: 
dev - object corresponding to device you connected to. You can use it to perform actions on the 
device (connect, disconnect, etc.)
void onRemoteReconnecting(Device &dev);
Remote device notifications. This method is called when reconnecting to a remote device after
failure. See EveusbController::enumRemoteDevices 
Parameters:
dev - object corresponding to device you’re trying to reconnect to. You can use it to perform 
actions on the device (connect, disconnect, etc.)
void onRemoteDisconnecting(Device &dev);
Remote device notifications. This method is called when disconnecting from a remote device.
See EveusbController::remoteDisconnect, EveusbController::enumRemoteDevices 
Parameters: 
dev - object corresponding to device which is going to be disconnected. You can use it to 
perform actions on the device (connect, disconnect, etc.)
void onRemoteDisconnected(Device &dev);
Remote device notifications. This method is called after disconnecting from a remote device.
See EveusbController::remoteDisconnect, EveusbController::enumRemoteDevices 
Parameters:
dev - object corresponding to disconnected device. You can use it to perform actions on the 
device (connect, disconnect, etc.)
void onRemoteDeleted(Device &dev);
Remote device notifications. This method is called if the remote device is not on the list any
more. See EveusbController::remoteDelete 
Parameters: 
dev - object corresponding to remote device
