//-------------------------------------------------------------------
// ECLCommNotify class
//
// This sample demonstrates the use of:
//
// ECLCommNotify::NotifyEvent
// ECLCommNotify::NotifyError
// ECLCommNotify::NotifyStop
// ECLConnection::RegisterCommEvent
// ECLConnection::UnregisterCommEvent
//-------------------------------------------------------------------
//...................................................................
// Define a class derived from ECLCommNotify
//...................................................................
class MyCommNotify: public ECLCommNotify
{
public:
// Define my own constructor to store instance data
MyCommNotify(HANDLE DataHandle);
// We have to implement this function
void NotifyEvent(ECLConnection *ConnObj, BOOL Connected);
// We choose to implement this function
void NotifyStop (ECLConnection *ConnObj, int Reason);
// We will take the default behaviour for this so we
// don't implement it in our class:
// void NotifyError (ECLConnection *ConnObj, ECLErr ErrObject);
private:
// We will store our application data handle here
HANDLE MyDataH;
};
//...................................................................
void MyCommNotify::NotifyEvent(ECLConnection *ConnObj,
BOOL Connected)
//
// This function is called whenever the communications link
// with the host connects or disconnects.
//
// For this example, we will just write a message. Note that we
// have access the the MyDataH handle which could have application
// instance data if we needed it here.
//
// The ConnObj pointer is to the ECLConnection object upon which
// this event was registered.
//...................................................................
{
if (Connected)
printf("Connection %c is now connected.\n", ConnObj->GetName());
else
printf("Connection %c is now disconnected.\n", ConnObj->GetName());
return;
}
//...................................................................
MyCommNotify::MyCommNotify(HANDLE DataHandle) // Constructor
//...................................................................
{
MyDataH = DataHandle; // Save data handle for later use
}
//...................................................................
void MyCommNotify::NotifyStop(ECLConnection *ConnObj,
int Reason)
//...................................................................
{
// When notification ends, display message
printf("Comm link monitoring for %c stopped.\n", ConnObj->GetName());
}
//...................................................................
// Create the class and start notification on connection 'A'.
//...................................................................
void Sample30() {
ECLConnection *Conn; // Ptr to connection object
MyCommNotify *Event; // Ptr to my event handling object
HANDLE InstData; // Handle to application data block (for example)
try {
Conn = new ECLConnection('A'); // Create connection obj
Event = new MyCommNotify(InstData); // Create event handler
Conn->RegisterCommEvent(Event); // Register for comm events
// At this point, any comm link event will cause the
// MyCommEvent::NotifyEvent() function to execute. For
// this sample, we put this thread to sleep during this
// time.
printf("Monitoring comm link on 'A' for 60 seconds...\n");
Sleep(60000);
// Now stop event generation. This will cause the NotifyStop
// member to be called.
Conn->UnregisterCommEvent(Event);
delete Event; // Don't delete until after unregister!
delete Conn;
}
catch (ECLErr Err) {
printf("ECL Error: %s\n", Err.GetMsgText());
}
} // end sample