Dependents: SimpleLCDClock readCard2Twitter_http AnalogClock_StepperMotor_NTP ServoCamV1
api/UdpSocket.h
- Committer:
- donatien
- Date:
- 2010-05-24
- Revision:
- 0:3717b703f76d
- Child:
- 1:e52ec2a24c6a
File content as of revision 0:3717b703f76d:
#ifndef UDPSOCKET_H #define UDPSOCKET_H #include "if/net/net.h" //Essentially it is a safe interface to NetUdpSocket enum UdpSocketErr { __UDPSOCKET_MIN = -0xFFFF, UDPSOCKET_SETUP, //NetUdpSocket not properly configured UDPSOCKET_IF, //If has problems, does not exist or is not initialized UDPSOCKET_MEM, //Not enough mem UDPSOCKET_INUSE, //If/Port is in use //... UDPSOCKET_OK = 0 }; enum UdpSocketEvent //Only one lonely event here... but who knows, maybe some day there'll be another one! { UDPSOCKET_READABLE, //Data in buf }; class UdpSocket { public: UdpSocket(); ~UdpSocket(); //close() UdpSocketErr bind(const Host& me); int /*if < 0 : UdpSocketErr*/ sendto(const char* buf, int len, Host* pHost); int /*if < 0 : UdpSocketErr*/ recvfrom(char* buf, int len, Host* pHost); /* TODO NTH : printf / scanf helpers that call send/recv */ UdpSocketErr close(); class CDummy; //Callbacks void setOnEvent( void (*pMethod)(UdpSocketEvent) ); template<class T> //Linker bug : Must be defined here :( void setOnEvent( T* pItem, void (T::*pMethod)(UdpSocketEvent) ) { m_pCbItem = (CDummy*) pItem; m_pCbMeth = (void (CDummy::*)(UdpSocketEvent)) pMethod; } void resetOnEvent(); //Disable callback protected: void onNetUdpSocketEvent(NetUdpSocketEvent e); UdpSocketErr checkInst(); private: NetUdpSocket* m_pNetUdpSocket; CDummy* m_pCbItem; void (CDummy::*m_pCbMeth)(UdpSocketEvent); void (*m_pCb)(UdpSocketEvent); }; #endif