/* $Id: Socket.h,v 1.3 1996/09/16 05:25:58 swetland Exp $
**
** The MessageSocket object
**
** Copyright 1996, Brian J. Swetland <swetland@uiuc.edu> and ACM@UIUC.
** Free for non-commercial use.  Share and Enjoy!
*/

#ifndef _SOCKET_H
#define _SOCKET_H

#include "Message.h"
#include "Events.h"

#define SBUFSIZ 4096

class MessageSocket
{
    int s;
    unsigned char buffer[SBUFSIZ];
    int bytesread;
    int pktsize;
    int src,dst;
    
  public:
    MessageSocket(int fd = -1);
    MessageSocket(MessageSocket *ms); /* accept a new connection */
    ~MessageSocket();

    void ListenOn(int port);
    void ConnectTo(char *host, int port);
    
    void SetNonblocking(void);
    
    void Write(Message *msg, Word src, Word dst);
    Message *Read(int *srcR, int *dstR);
    
    int GetFD(void) { return s; }
};

class AcceptHandler : public EventHandler
{
    MessageHandler *messagehandler;
    MessageSocket *con;
public:
    int HandleEvent(int fd);
    AcceptHandler(MessageHandler *mh, MessageSocket *ms);    
};

class SocketHandler : public EventHandler
{
    MessageHandler *messagehandler;
    MessageSocket *con;
    
public:
    SocketHandler(MessageHandler *mh, MessageSocket *ms);
    int HandleEvent(int fd);
};

#endif /* _SOCKET_H */

