ACE Tutorial 015
Building a protocol stream


This and the next three pages present the protocol objects that provide compression and encryption. If you were hoping to learn the secrets of compression and encryption then I'm going to disappoint you. There are some really good libraries out there that do this stuff though and if anyone wants to integrate one of them into the tutorial I'll be glad to take it!

// $Id: page18.html,v 1.3 1998/10/27 19:05:56 jcej Exp $

#ifndef COMPRESSOR_H
#define COMPRESSOR_h

#include "Protocol_Task.h"

/* A reallly dumb compression object.  (It actually adds 3 bytes to
   every message block.)
*/
class Compressor : public Protocol_Task
{
public:

    typedef Protocol_Task inherited;

        // I've given you the option of creating this task derivative
        // with a number of threads.  In retro-spect that really isn't
        // a good idea.  Most client/server systems rely on requests
        // and responses happening in a predicatable order.  Introduce
        // a thread pool and message queue and that ordering goes
        // right out the window.  In other words:  Don't ever use the
        // constructor parameter!
    Compressor( int _thr_count = 0 );

    ~Compressor(void);

protected:

        // This is called when the compressor is on the downstream
        // side.  We'll take the message, compress it and move it
        // along to the next module.
     int send(ACE_Message_Block *message,
              ACE_Time_Value *timeout);

        // This one is called on the upstream side.  No surprise:  we
        // decompress the data and send it on up the stream.
     int recv(ACE_Message_Block *message,
              ACE_Time_Value *timeout);
};

#endif // COMPRESSOR_H


[Tutorial Index] [Continue This Tutorial]