Object interfaces to Vsta

From: Lars Pensjo <lars_at_nospam.org>
Date: Wed Aug 17 1994 - 02:18:29 PDT

Wouldn't it be a good idea to create an object oriented interface to
system services, libraries etc ? Now should be the right time to do this,
before Vsta grows too much.

What are the possibilities to also port g++ to the Vsta environment ?

For example, most servers use quite a lot of common code. How about making a
class for this ?

Define a basic class for client process message management. This class would
handle the switch-statement, and then call virtual member functions
depending on the message type.

It is now quite easy to override the function whose behaviour
you want to change. This is also a better solution than a C-mechanism
where you register call-back functions.

There is some overhead as functions will be called indirectly through pointers
instead of code being executed inline in the switch statement, but I really
think it is minor.

An example how it could look:

class ServerBase {
public:
    ServerBase(const char *namerName, int numUsers=16);
    void MainLoop();

protected:
    virtual void Connect(msg&); // New client
    virtual void Dup(msg&, file&); // Dup during exec
    virtual void Abort(msg&, file&); // Aborted operation
    virtual void Disconnect(msg&, file&); // Client done

    virtual void Open(msg&, file&); // Look up file from directory
    virtual void Read(msg&, file&); // Read file
    virtual void AbsRead(msg&, file&); // Set position, then read
    virtual void Write(msg&, file&); // Write file
    virtual void AbsWrite(msg&, file&); // Set position, then write
    virtual void Seek(msg&, file&); // Set new file position
    virtual void Stat(msg&, file&); // Tell about file
    virtual void Wstat(msg&, file&); // Set stuff on file
    virtual void Remove(msg&, file&); // Get rid of file
    virtual void Fid(msg&, file&); // File id.
    virtual void Rename(msg&, file&=; // Rename file/dir

private:
    port_name nm;
    hash* filehash; // Map of all active users
    port_t port; // Port we receive contacts through

};

This class should probably be split into two, where the base class doesn't
handle hashing of clients.

------
Distinct Systems
Lars Pensjo
Received on Wed Aug 17 00:32:53 1994

This archive was generated by hypermail 2.1.8 : Wed Sep 21 2005 - 21:04:28 PDT