Brief description of class still missing. More...
#include <ScreenClient.h>
Public Member Functions | |
void | connect () |
virtual void | hungUp () |
ScreenClient (const Address &host, uint16_t port) | |
Static Public Member Functions | |
static ScreenClient * | instance () |
static void | write (unsigned char x, unsigned char y, const char *cformat,...) |
Brief description of class still missing.
Full description of class still missing
GpCoreTools::ScreenClient::ScreenClient | ( | const Address & | host, |
uint16_t | port | ||
) |
Description of constructor still missing
References connect(), and TRACE.
: TcpClientStream(host) { TRACE; assert(!_self); _self=this; assert(pthread_mutex_init(&_mutex, 0)==0); _port=port; _connected=false; connect(); }
void GpCoreTools::ScreenClient::connect | ( | ) |
References GpCoreTools::TcpClientStream::connect(), GpCoreTools::EventLoop::instance(), GpCoreTools::Timer::start(), and TRACE.
Referenced by GpCoreTools::ScreenClientConnect::exec(), and ScreenClient().
{ TRACE; pthread_mutex_lock(&_mutex); if(!TcpClientStream::connect(_port)) { if(EventLoop::instance()) { ScreenClientConnect * t=new ScreenClientConnect(this); t->start(); // Retry in ten seconds } } else { _connected=true; } pthread_mutex_unlock(&_mutex); }
void GpCoreTools::ScreenClient::hungUp | ( | ) | [virtual] |
Reimplemented from GpCoreTools::TcpClientStream.
References GpCoreTools::Stream::fileDescriptor(), GpCoreTools::Stream::setFileDescriptor(), GpCoreTools::Timer::start(), TRACE, and write().
{ TRACE; pthread_mutex_lock(&_mutex); // Sets new socket setFileDescriptor(socket(AF_INET, SOCK_STREAM, 0)); if(fileDescriptor()<=0) { Log::write(0, "%s\n", strerror(errno)); } _connected=false; pthread_mutex_unlock(&_mutex); ScreenClientConnect * t=new ScreenClientConnect(this); t->start(); // Retry in ten seconds }
static ScreenClient* GpCoreTools::ScreenClient::instance | ( | ) | [inline, static] |
{return _self;}
void GpCoreTools::ScreenClient::write | ( | unsigned char | x, |
unsigned char | y, | ||
const char * | cformat, | ||
... | |||
) | [static] |
References GpCoreTools::FletcherChecksum::add(), GpCoreTools::MessageRawHeader::HeaderSize, GpCoreTools::MessageRawHeader::littleEndianValues(), TRACE, and GpCoreTools::TcpClientStream::writePartial().
Referenced by hungUp(), and main().
{ TRACE; pthread_mutex_lock(&_self->_mutex); if(_self->_connected) { char buf[32]; // No more than 20 characters at a time buf[0]=17; buf[1]=x; buf[2]=y; va_list argptr; va_start(argptr, cformat); char * msgBuf=buf+3; vsnprintf(msgBuf, 28, cformat, argptr); va_end(argptr); int n=strlen(msgBuf); if(n>20) { Log::write(0, "More than 20 characters\n"); Log::write(0, "'%s'\n", msgBuf); n=20; } n+=3; MessageRawHeader * hdr=new MessageRawHeader(n); hdr->littleEndianValues(); if(_self->writePartial((const char *)hdr, sizeof(MessageRawHeader)) && _self->writePartial(buf, n)) { FletcherChecksum chk; chk.add(hdr->header(), MessageRawHeader::HeaderSize); chk.add(buf, n); _self->TcpClientStream::write((const char *)&chk, sizeof(chk)); } delete hdr; } pthread_mutex_unlock(&_self->_mutex); }