/* PIP - Platform Independent Primitives Ethernet, UDP Copyright (C) 2011 Ivan Pelipenko peri4@rambler.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef PIETHERNET_H #define PIETHERNET_H #include "pithread.h" #include "pistring.h" #ifndef WINDOWS # include # include # include #else # ifdef CC_VC # include # define SHUT_RDWR 2 # else # include # define SHUT_RDWR SD_BOTH # endif #endif #define BUFFER_SIZE 4096 typedef bool (*EthernetFunc)(void * , char * , int ); class PIEthernet: public PIThread { public: // slot is any function format "bool (void*, char*, int)" PIEthernet(PIString ip = "", int port = 0, void * data = 0, EthernetFunc slot = 0); ~PIEthernet(); void setSlot(EthernetFunc func) {ret_func = func;} void setData(void * d) {data = d;} void setReadAddress(PIString ip, int port) {ip_ = ip; port_ = port;} void setSendAddress(PIString ip, int port) {ip_s = ip; port_s = port;} bool send(PIString ip, int port, char * data, int size); bool send(char * data, int size); bool init(); bool initSend(); bool receiverInitialized() const {return sock != -1;} bool senderInitialized() const {return sock_s != -1;} void terminate(); const char * buffer() const {return buffer_;} private: void begin(); void run(); void end(); int sock, sock_s, port_, port_s, wrote, readed, tries; sockaddr_in addr_, saddr_; PIString ip_, ip_s; EthernetFunc ret_func; void * data; char buffer_[BUFFER_SIZE]; }; #endif // PIETHERNET_H