/* $Id: Demo.C,v 1.3 1996/09/16 05:25:53 swetland Exp $
**
** A test of the Message and MessageSocket objects.
**
** Copyright 1996, Brian J. Swetland <swetland@uiuc.edu> and ACM@UIUC.
** Free for non-commercial use.  Share and Enjoy!
*/

#include <stdio.h>

#include "Message.h"
#include "Socket.h"

main(int argc, char *argv[])
{
    MessageSocket *ms, *con;
    Message *msg;
    int s,d;
    
    if(argc < 3) {
        fprintf(stderr,"usage:  a.out [listen|<hostname>] <portno>\n");
        return 0;
    }
    
    if(!strcmp(argv[1],"listen")){
        fprintf(stderr,"Listening on %d\n",atoi(argv[2]));
        ms = new MessageSocket();
        ms->ListenOn(atoi(argv[2]));

        fprintf(stderr,"Waiting for connection\n");
        con = new MessageSocket(ms);

        fprintf(stderr,"Connected\n");
        for(;;){
            if(msg = con->Read(&s, &d)){
                fprintf(stderr,"Mesage %d -> %d:\n",s,d);
                msg->Print();
                delete msg;
                
                msg = new Message("Welcome!");
                msg->PutString("s1","Hello, Client!");
                msg->PutByte("b1",'c');
                msg->PutWord("elite",0);
                
                con->Write(msg,2020,1010);
                delete msg;
            }
        }
    } else {
        fprintf(stderr,"Connecting to %s:%d\n",argv[1],atoi(argv[2]));
        ms = new MessageSocket();
        ms->ConnectTo(argv[1],atoi(argv[2]));

        msg = new Message("Hello!");
        msg->PutString("s1","Hello, Server!");
        msg->PutByte("b1",'b');
        msg->PutWord("elite",31337);

        ms->Write(msg, 1010, 2020);
        delete msg;

        while(!(msg = ms->Read(&s, &d)));
        
        msg->Print();
        delete msg;

        delete ms;
    }
}



