campo-sirio/include/mailbox.h
guy 42bddb770f array.h Tolta riga vuota
assoc.h     Aggiunta macro di iterazione sugli elementi
golem.h     Aggiunta gestione della posta
golem.cpp   Suvvia c'e' la postaa, la posta eletrronicaaa
mailbox.h   Aggiunto vitrtual davanti al distruttore dei TMessage
msksheet.h  Aggiunte macro di iterazione sulle righe
regexp.h    Tolta #define di NULL
strings.cpp Aggiunti metodi a TFilename:
            is_absolute_path, is_relative_path e make_absolute_path
strings.h   Tolta #include <regexp.h> (-1K nel file .mak)


git-svn-id: svn://10.65.10.50/trunk@5626 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-11-17 10:28:04 +00:00

187 lines
5.7 KiB
C++
Executable File

#ifndef __MAILBOX_H
#define __MAILBOX_H
#ifndef __STRINGS_H
#include <strings.h>
#endif
// TMessage flags
#define MSG_READ (0x01)
// @doc EXTERNAL
// @class TMessage | Classe per il passaggio dei messaggi base tra applicazioni
// e linea di comando
//
// @base public | TObject
class TMessage : public TObject
// @author:(INTERNAL) Guido
{
// @cfriend TMailbox
friend class TMailbox;
// @access:(INTERNAL) Private Member
// @cmember:(INTERNAL) Applicazione che lancia il messaggio
TString16 _from;
// @cmember:(INTERNAL) Applicazione che deve ricevere il messaggio
TString16 _to;
// @cmember:(INTERNAL) Oggetto del messaggio
TString80 _subject;
// @cmember:(INTERNAL) Testo del messaggio
TString _text;
// @cmember:(INTERNAL) Flag di controllo del messaggio
byte _flags;
// #cmember Numero (non si sa cosa faccia)
// int _number;
// @access Protected Member
protected:
// @cmember Indica che il messaggio e' stato letto
void setread()
{ _flags |= MSG_READ; }
// @cmember Controlla se il messaggio e' stato letto (TRUE se e' stato letto)
bool isread()
{ return _flags & MSG_READ; }
// #cmember Setta il numero. Se viene passato -1 ritorna il valore attuale
// int number(int n = -1)
// { return (n == -1 ? _number : (_number = n)); }
// @access Public Member
public:
// @cmember Ritorna il nome dell'applicazione che lancia il messaggio
const TString& from() const
{ return _from; }
// @cmember Ritorna il nome dell'applicazione che deve ricevere il messaggio
const TString& to() const
{ return _to; }
// @cmember Ritorna l'oggetto del messaggio
const TString& subject() const
{ return _subject; }
// @cmember Ritorna il testo del messaggio
const TString& body() const
{ return _text; }
// @cmember Assegna il nome dell'applicazione che lancia il messaggio
const TString& from(const char* f)
{ return _from = f; }
// @cmember Assegna il nome dell'applicazione che deve ricevere il messaggio
const TString& to(const char* t)
{ return _to = t; }
// @cmember Assegna l'oggetto del messaggio
const TString& subject(const char* s)
{ return _subject = s; }
// @cmember Assegna il testo del messaggio
const TString& body(const char* b)
{ return _text = b; }
// @cmember Manda il messaggio
void send();
// @cmember Costruttore
TMessage(const char* to, const char* sub, const char* text, const char* from = NULL);
virtual ~TMessage() { }
};
// @class TMailbox | Classe per controllare i messaggi ricevuti da una applicazione
//
// @base public | TObject
class TMailbox : public TObject
// @author:(INTERNAL) Villa
// @access:(INTERNAL) Private Member
{
// @cmember:(INTERNAL) Nome del file che contiene i messaggi
TFilename _path;
// @cmember:(INTERNAL) Array di messaggi ricevuti
TArray _msgs;
// @cmember:(INTERNAL) Numero dell'ultimo messaggio letto
int _lastread;
// @cmember:(INTERNAL) Numero di messaggi in attesa di lettura
int n_new;
// @cmember:(INTERNAL) Posizione nel file dell'ultimo messaggio letto
long _lastpos;
// @cmember:(INTERNAL) Indice dei messaggi letti e non letti
int _cnt;
// @access Protected Member
protected:
// @cmember Legge un nuovo messaggio dalla mailbox. Crea messaggi, mette i
// messaggi nell'array in ordine cronologico
void reread();
// @cmember Ritorna il prossimo messaggio letto (NULL se non e' stato letto)
TMessage* next_read();
// @cmember Ritorna il prossimo messaggio non letto
TMessage* next_unread();
// @access Public Member
public:
// @cmember Ritorna il numero di messaggi in attesa
int check()
{ reread(); return n_new; }
// @cmember Reinizializza la fase di lettura
void restart()
{ _cnt = 0;}
// @cmember Ritorna in numero di messaggi, letti e da leggere, presenti nella mailbox
int items()
{ return _msgs.items(); }
// @cmember Ritorna il prossimo messaggio
TMessage* next(bool read = FALSE);
// @cmember Ritorna il prossimo messaggio con lo stesso oggetto
TMessage* next_s(const char* s, bool read = FALSE);
// @cmember Ritorna il prossimo messaggio con lo stesso mandante
TMessage* next_f(char* f, bool read = FALSE);
// @cmember Manda un messaggio
void send(TMessage& m);
// @cmember Trasforma gli argomenti della command line in messaggi mail (NON IMPLEMENTATA)
void sendcmd(int argc, char* argv[],char* to);
// @cmember Trasforma una mailbox in parametri per la command line per la
// chaimata di applicazioni non compilanti (NON IMPLEMENTATA)
char* readcmd(char* to = NULL);
// @cmember Ritorna l'<p n>-esimo messaggio
TMessage* get(int n)
{ return (TMessage*)_msgs.objptr(n); }
// @cmember Costruttore
TMailbox::TMailbox(const char* appname = NULL);
// @cmember Distruttore
virtual ~TMailbox();
};
// @todo Da implementare in futuro
//
// instead of using commandline args directly, user posts
// messages to application, then calls it without arguments
// If the application is called by the user with command_line
// arguments, sendcmd parses them and translates to messages
// according to the following rules:
//
// from is "cmdline"
//
// subject comes from arguments of type -opt=value
// (opt becomes subject and value becomes body)
//
// args like -opt="val, val, val" create
// one message for each val, with the same subject=opt
//
// -opt arg creates subject=opt and empty body
//
// one-word arguments create a message with "null" subject
//
// A mailbox should be member of applicat and sendcmd should be
// called automatically upon startup
// Non compliant applications (which do not use mailbox) can be
// called consistently by sending messages,
// appending TMailbox::readcmd(appname) to
// their name and doing an exec()
#endif