#include <receiver.h>
Public Member Functions | |
Receiver (wxString remoteAddr=wxT("127.0.0.1"), unsigned short remotePort=2627, unsigned short localPort=2627, unsigned bufferLength=8192) | |
Constructor. | |
~Receiver () | |
Destructor. | |
void | UpdateSocket (wxString remoteAddr, unsigned short remotePort, unsigned short localPort) |
Rebuild Socket if some parameters has changed. | |
bool | Receive () |
Receive Datagram (if it is available). | |
unsigned | GetPacketLength () |
returns length of the packet (after last Receive() call) | |
char * | GetPacket () |
returns pointer to packet buffer | |
void | ResizeBuffer (unsigned short length) |
Changes size of recieving buffer. | |
Receiver (wxString remoteAddr=wxT("127.0.0.1"), unsigned short remotePort=2627, unsigned short localPort=2627, unsigned bufferLength=8192) | |
Constructor. | |
~Receiver () | |
Destructor. | |
void | UpdateSocket (wxString remoteAddr, unsigned short remotePort, unsigned short localPort) |
Rebuild Socket if some parameters has changed. | |
bool | Receive () |
Receive Datagram (if it is available). | |
unsigned | GetPacketLength () |
returns length of the packet (after last Receive() call) | |
char * | GetPacket () |
returns pointer to packet buffer | |
void | ResizeBuffer (unsigned short length) |
Changes size of recieving buffer. | |
Private Attributes | |
wxIPV4address | local |
Local IP address or hostname and port. | |
wxIPV4address | remote |
Remote IP address or hostname and port. | |
wxDatagramSocket * | recvSocket |
the UDP socket | |
char * | packetBuffer |
Pointer to dynamic array buffer. | |
unsigned | packetMaxLength |
Maximum length of packet (size of packetBuffer ). | |
unsigned | packetLength |
Length of the last received packet. | |
wxDatagramSocket * | recvSocket |
the UDP socket | |
char * | packetBuffer |
Pointer to dynamic array buffer. |
This clas use a wxDatagramSocket to receive udp Datagrams. It also uses a byte buffer to save and accept data from socket
If Receiver is not working (in the sence it is not receiving any datagrams, consider this:
Definition at line 26 of file receiver.h.
Receiver::Receiver | ( | wxString | remoteAddr = wxT("127.0.0.1") , |
|
unsigned short | remotePort = 2627 , |
|||
unsigned short | localPort = 2627 , |
|||
unsigned | bufferLength = 8192 | |||
) |
Constructor.
remoteAddr | IP address or hostname of remote peer | |
remotePort | Port (service) of the peer | |
localPort | Port (service) that is module listening on | |
bufferLength | sizze of the buffer to be created |
Definition at line 13 of file receiver.cpp.
00014 { 00015 packetBuffer = new char[bufferLength + 1]; 00016 packetMaxLength = bufferLength; 00017 00018 local.AnyAddress(); 00019 local.Service(localPort); 00020 //remote.Hostname(remoteAddr); 00021 remote.AnyAddress(); 00022 remote.Service(remotePort); 00023 00024 recvSocket = new wxDatagramSocket(local, wxSOCKET_NOWAIT); 00025 if (recvSocket->Error()) LOGERROR(wxT("<Tracking> Socket error while creating")); 00026 // this->recvSocket->SetEventHandler(*this, SocketHandlingID); 00027 // this->recvSocket->SetNotify(wxSOCKET_OUTPUT_FLAG | wxSOCKET_INPUT_FLAG | wxSOCKET_CONNECTION_FLAG| wxSOCKET_LOST_FLAG); 00028 // this->recvSocket->Notify(true); 00029 // this->Connect(wxEVT_SOCKET, wxSocketEventHandler(Receiver::ProcessEvtSocket), NULL, this); 00030 }
Receiver::~Receiver | ( | ) |
Destructor.
Deletes buffer array so it can't be used from the out of the class Socket is also destroyed.
Definition at line 31 of file receiver.cpp.
00032 { 00033 delete [] packetBuffer; 00034 recvSocket->Destroy(); 00035 }
Receiver::Receiver | ( | wxString | remoteAddr = wxT("127.0.0.1") , |
|
unsigned short | remotePort = 2627 , |
|||
unsigned short | localPort = 2627 , |
|||
unsigned | bufferLength = 8192 | |||
) |
Constructor.
remoteAddr | IP address or hostname of remote peer | |
remotePort | Port (service) of the peer | |
localPort | Port (service) that is module listening on | |
bufferLength | sizze of the buffer to be created |
Receiver::~Receiver | ( | ) |
Destructor.
Deletes buffer array so it can't be used from the out of the class Socket is also destroyed.
void Receiver::UpdateSocket | ( | wxString | remoteAddr, | |
unsigned short | remotePort, | |||
unsigned short | localPort | |||
) |
Rebuild Socket if some parameters has changed.
remoteAddr | IP address or hostname of remote peer | |
remotePort | Port (service) of the peer | |
localPort | Port (service) that is module listening on |
Definition at line 36 of file receiver.cpp.
00037 { 00038 recvSocket->Destroy(); 00039 local.AnyAddress(); 00040 local.Service(localPort); 00041 //remote.Hostname(remoteAddr); 00042 remote.AnyAddress(); 00043 remote.Service(remotePort); 00044 00045 00046 recvSocket = new wxDatagramSocket(local, wxSOCKET_NOWAIT); 00047 if (recvSocket->Error()) LOGERROR(wxT("<Tracking> Socket error while updating")); 00048 LOGERROR(wxT("<Tracking> Socket recreated")); 00049 00050 }
bool Receiver::Receive | ( | ) |
Receive Datagram (if it is available).
Definition at line 51 of file receiver.cpp.
00052 { 00053 // recvSocket->WaitForRead(0, 10); 00054 // recvSocket->SetTimeout(1); 00055 00056 recvSocket->RecvFrom(remote, packetBuffer, packetMaxLength); 00057 packetLength = recvSocket->LastCount(); 00058 if (packetLength != 0) 00059 { 00060 if (packetLength > packetMaxLength){ LOGERROR(wxT("<Tracking> Too long datagram received!")); return false;}; 00061 if (packetLength == packetMaxLength){ LOGWARNING(wxT("<Tracking> Maximum amount of data on receiver buffer. Consider larger")); return false;}; 00062 packetBuffer[packetLength] = 0; 00063 return true; 00064 } 00065 // if (recvSocket->Error()){ LOGERROR(wxT("<Tracking> Socket Error - no data received.")); return false;} 00066 return false; 00067 }
unsigned Receiver::GetPacketLength | ( | ) | [inline] |
returns length of the packet (after last Receive() call)
Definition at line 65 of file receiver.h.
00065 {return packetLength;}
char* Receiver::GetPacket | ( | ) | [inline] |
returns pointer to packet buffer
Definition at line 67 of file receiver.h.
00067 {return packetBuffer;}
void Receiver::ResizeBuffer | ( | unsigned short | length | ) |
Changes size of recieving buffer.
length | - use maximum size of Packet you suppose to receive. |
Definition at line 68 of file receiver.cpp.
00069 { 00070 if (length != packetMaxLength) 00071 { 00072 packetMaxLength = length; 00073 delete [] packetBuffer; 00074 packetBuffer = new char[length + 1]; 00075 } 00076 }
void Receiver::UpdateSocket | ( | wxString | remoteAddr, | |
unsigned short | remotePort, | |||
unsigned short | localPort | |||
) |
Rebuild Socket if some parameters has changed.
remoteAddr | IP address or hostname of remote peer | |
remotePort | Port (service) of the peer | |
localPort | Port (service) that is module listening on |
bool Receiver::Receive | ( | ) |
Receive Datagram (if it is available).
unsigned Receiver::GetPacketLength | ( | ) | [inline] |
returns length of the packet (after last Receive() call)
Definition at line 65 of file receiver.h.
00065 {return packetLength;}
char* Receiver::GetPacket | ( | ) | [inline] |
returns pointer to packet buffer
Definition at line 67 of file receiver.h.
00067 {return packetBuffer;}
void Receiver::ResizeBuffer | ( | unsigned short | length | ) |
Changes size of recieving buffer.
length | - use maximum size of Packet you suppose to receive. |
wxIPV4address Receiver::local [private] |
wxIPV4address Receiver::remote [private] |
wxDatagramSocket* Receiver::recvSocket [private] |
char* Receiver::packetBuffer [private] |
unsigned Receiver::packetMaxLength [private] |
unsigned Receiver::packetLength [private] |
wxDatagramSocket* Receiver::recvSocket [private] |
char* Receiver::packetBuffer [private] |