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 ************************************************************************************/