/* $Id: clientconnectiondirect.cpp,v 1.5 2005/12/04 22:44:49 chfreund Exp $ */ #include "clientconnectiondirect.hpp" #include "serverconnectiondirect.hpp" ClientConnectionDirect::~ClientConnectionDirect() { SDL_DestroyMutex( m_mutex ); } Uint8 ClientConnectionDirect::openConnection() { return m_communicator->addConnection( this ); } EventMessage* ClientConnectionDirect::getEventMessage() { SDL_mutexP( m_mutex ); if ( !m_eventMessageQueue.empty() ) { /* EventMessage* eventMessage = m_eventMessageQueue.front(); m_eventMessageQueue.pop_front();*/ EventMessage* eventMessage = m_eventMessageQueue.back(); m_eventMessageQueue.clear(); SDL_mutexV( m_mutex ); return eventMessage; } SDL_mutexV( m_mutex ); return 0; } Message* ClientConnectionDirect::getMessage() { SDL_mutexP( m_mutex ); if ( !m_messageQueue.empty() ) { Message* message = m_messageQueue.front(); m_messageQueue.pop_front(); SDL_mutexV( m_mutex ); return message; } SDL_mutexV( m_mutex ); return 0; } void ClientConnectionDirect::sendMessage( Message* message ) { // Message* newMessage = message->clone(); m_directConnection->recvMessage( message ); if ( m_listener ) { Sint32 messageSize = message->getSerializeBufferSize(); m_listener->sendProgress( messageSize, messageSize ); } } void ClientConnectionDirect::sendEchoMessage( Message* echoMessage ) { m_directConnection->recvMessage( echoMessage ); } void ClientConnectionDirect::recvMessage( Message* message ) { SDL_mutexP( m_mutex ); if ( message->type == Message::EVENT ) m_eventMessageQueue.push_back( static_cast( message ) ); else m_messageQueue.push_back( message ); SDL_mutexV( m_mutex ); }