
I've been doing some Android programming, trying to get a feel for what an Android app would look like when structured as a main screen, some set-up screens, and a main gameplay screen (which then wants to go back to the main screen). I've fought a bit with the built-in Android layout views. They seem to be missing some capabilities that would be really useful.

#include "etwork/etwork.h" #include "etwork/buffer.h" #include "etwork/errors.h" #include "etwork/notify.h" #include "etwork/marshal.h" #include <assert.h> #include <stdio.h> #include <string> #include <math.h> #if defined( NDEBUG ) #pragma warning( disable: 4101 ) // unreferenced local variable #endif void TestEtworkCreate() { EtworkSettings es;

A simple command-line program that exercises parts of the Etwork API and asserts if something fails. Think of it as an API acceptance test.

#if !defined( etwork_sockimpl_h ) #define etwork_sockimpl_h #include "etwork/etwork.h" #include "etwork/locker.h" #include "etwork/buffer.h" #include "etwork/timer.h" #include "etwork/errors.h" #include "etwork/notify.h" #if defined( WIN32 ) #include <windows.h> #endif #include <stdio.h> // for _snprintf #include <math.h> #include <string> #include <map>

#include "sockimpl.h" using namespace etwork; using namespace etwork::impl; SocketManager::SocketManager() { listening_ = INVALID_SOCKET; maxNumSocks_ = FD_SETSIZE; numSocks_ = 0; maxSock_ = 0; allSet_ = (fd_set *)::operator new( sizeof(fd_set) ); FD_ZERO( allSet_ ); readSet_ = (fd_set *)::operator new( sizeof(fd_set) ); FD_ZERO( readSet_ );

#include <assert.h> #include <string> #include <math.h> #include <map> #include "etwork/marshal.h" namespace marshaller { inline std::string operator+( std::string const & left, int right ) { char buf[24]; sprintf( buf, "%d", right ); return left + std::string( buf ); } inline std::string operator+( std::string const & left, size_t right ) { char buf[24];

#include "sockimpl.h" #include <stdarg.h> using namespace etwork; using namespace etwork::impl; #if !defined( NDEBUG ) bool etwork::impl::gDebugging = true; #else bool etwork::impl::gDebugging = false; #endif bool etwork::impl::wsOpen = false; Lock etwork::impl::gethostLock; //!< gethostbyname is not thread safe IErrorNotify * etwork::impl::gErrorNotify;

#include "etwork/buffer.h" #include <string.h> #include <deque> #include <assert.h> using namespace etwork; //! The framing protocol for etwork::Buffer is simple: each packet is //! preceded by a two-byte length, in network-endian order. //! If random data is received, this may result in arbitrary packet

#include "etwork/marshal.h" Block::Block( void * base, size_t size ) { buf_ = (unsigned char *)base; size_ = size; pos_ = 0; deleteIt_ = false; atEof_ = false; } Block::Block( size_t size ) { buf_ = (unsigned char *)::operator new( size ); size_ = size; pos_ = 0; deleteIt_ = true; atEof_ = false; } Block::~Block() { if( deleteIt_ ) {

Source code for the actual library -- includes code that calls WinSock to do actual network I/O.