Hauptseite   Klassenhierarchie   Datenstrukturen   Auflistung der Dateien   Datenstruktur-Elemente   Datei-Elemente  

RNPacket.h

gehe zur Dokumentation dieser Datei
00001 /***********************************************************************************/
00002 /** \file               RNPacket.h
00003 **  \brief              Header File zur Klasse RNPacket
00004 *************************************************************************************
00005 **  Autor:              Christian Roesch
00006 **
00007 **  Erstelldatum:       27.03.2002
00008 **  letzte Aenderung:   01.04.2002
00009 *************************************************************************************
00010 **  Die Klasse RNPacket sendet oder empfängt Daten in der Form von beliebigen
00011 **  Datenblöcken.
00012 ************************************************************************************/
00013 
00014 #ifndef _RNPacket_H
00015 #define _RNPacket_H
00016 
00017 // includes
00018 #include "..\common\RNSocket.h"
00019 
00020 /***********************************************************************************/
00021 /** Enumeration der Rückgabewerte in RNPacket
00022 ************************************************************************************/
00023 enum RNPRESULT
00024 {
00025     //! Daten gesendet
00026     RNP_OK,      
00027     //! Buffer auf das Packet wird nicht mehr benötigt
00028     RNP_BUFFER_RETURNED,         
00029     //! Buffer auf das Packet wird benutzt und später selbst deleted
00030     RNP_BUFFER_IN_USE,       
00031     //! Paramter sind invalid
00032     RNP_ERROR_INVALID_PARAM = 0x80000000,        
00033     //! RNPacket ist noch nicht initialisiert
00034     RNP_ERROR_NOT_INITIALIZED,       
00035     //! es ist ein Fehler bei Zugriff auf den Socket aufgetreten
00036     RNP_ERROR_SOCKET,        
00037     //! ein undefinierter Fehler ist aufgetreten
00038     RNP_ERROR_UNDEFINED,         
00039     //! Socket konnte nicht beschrieben werden
00040     RNP_SOCKET_NOT_WRITEABLE,        
00041     //! Socket konnte nicht gelesen werden
00042     RNP_SOCKET_NOT_READABLE,     
00043     //! Socket konnte nicht verbunden werden
00044     RNP_SOCKET_NOT_CONNECTED,    
00045 };
00046 
00047 //! maximale Paketgrösse
00048 const int c_iMaxPacketLength=2+65536;
00049 
00050 /***********************************************************************************/
00051 /** \brief  Der Funktiontyp des MessageHandler CallBacks
00052 *************************************************************************************
00053 **  Um RNPacket zu benutzen, ist eine CallBack Funktion von diesem Typ nötig.
00054 **  pvoidUserContext ist der Pointer, der bei RNPacket::initMessageCallBack
00055 **  übergeben wurde, pvoidPacket ist der Pointer auf das Paket. Die Funktion
00056 **  muss RNP_BUFFER_RETURNED oder RNP_BUFFER_IN_USE zurückgeben.
00057 ************************************************************************************/
00058 typedef RNPRESULT (*PMESSAGECALLBACK)( 
00059   void* pvoidUserContext,
00060   void* pvoidPacket,
00061   WORD  wSize
00062 );
00063 
00064 // Klassen-Deklaration
00065 
00066 /***********************************************************************************/
00067 /** \brief  RNPacket sendet und empfängt Pakete
00068 *************************************************************************************
00069 **  RNPacket kümmert sich darum, das beim Senden automatisch die Längeninformation
00070 **  dem Paket hinzugefügt wird und diese beim Empfangen wieder entfernt wird. 
00071 ************************************************************************************/
00072 
00073 class   RNPacket
00074 {
00075 public:
00076     RNPacket(void);
00077     ~RNPacket(void);
00078     
00079 RNPRESULT   initMessageCallBack(void* pvoidUserContext,const PMESSAGECALLBACK pmcFoo);
00080     
00081 RNPRESULT   sendMessage(void* pvoidData, WORD wBufferSize);
00082     
00083 RNPRESULT   recvMessage(void);
00084 
00085 RNPRESULT   socketConnect(  char* pcDestName,
00086                             int iPort,
00087                             int iAdressFamily = AF_INET , 
00088                             int iType = SOCK_STREAM,
00089                             int iProtocol = IPPROTO_IP);
00090 
00091 RNPRESULT   socketAccept(RNSocket* psocketListener);
00092 
00093 RNPRESULT   socketClose(void);
00094 
00095 protected:
00096 
00097 private:
00098 
00099     //! Der Socket über den gesendet oder empfangen wird
00100     RNSocket            m_RNSSocket;
00101 
00102     //! gibt an ob Objekt bereits initialisiert wurde
00103     bool                m_bInitialized;
00104 
00105     //! Funktionspointer auf den Messagehandler CallBack
00106     PMESSAGECALLBACK    m_pmcCallBack;
00107 
00108     //! Der User Kontext, der bei initialize übergeben wurde
00109     void*               m_pvoidUserContext;
00110 
00111     //! Buffer für teilweise empfangene Nachrichten
00112     char                m_pcBuffer[c_iMaxPacketLength];
00113 
00114     //! Anzahl der Bytes, die noch im Buffer sind
00115     int                 m_iBufferUsage;
00116 };
00117 
00118 #endif//_RNPacket_H
00119 
00120 class   RNPacket;
00121 enum    RNPRESULT;
00122 
00123 /************************************************************************************
00124 **  Ende der Datei:     RNPacket.h
00125 ************************************************************************************/

Erzeugt am Thu Apr 4 19:23:30 2002 für Rechnernetze-Aufgabe1 von doxygen1.2.13.1 geschrieben von Dimitri van Heesch, © 1997-2001