EngineClient::EngineClient( ds::App& app, const ds::cfg::Settings& settings, ds::EngineData& ed, const ds::RootList& roots) : inherited(app, settings, ed, roots) , mLoadImageService(*this, mIpFunctions) , mRenderTextService(mRenderTextThread) , mSender(mSendConnection) , mReceiver(mReceiveConnection) , mBlobReader(mReceiver.getData(), *this) , mSessionId(0) , mConnectionRenewed(false) , mServerFrame(-1) , mState(nullptr) , mIoInfo(*this) { // NOTE: Must be EXACTLY the same items as in EngineServer, in same order, // so that the BLOB ids match. HEADER_BLOB = mBlobRegistry.add([this](BlobReader& r) {receiveHeader(r.mDataBuffer);}); COMMAND_BLOB = mBlobRegistry.add([this](BlobReader& r) {receiveCommand(r.mDataBuffer);}); DELETE_SPRITE_BLOB = mBlobRegistry.add([this](BlobReader& r) {receiveDeleteSprite(r.mDataBuffer);}); CLIENT_STATUS_BLOB = mBlobRegistry.add([this](BlobReader& r) {receiveClientStatus(r.mDataBuffer); }); CLIENT_INPUT_BLOB = mBlobRegistry.add([this](BlobReader& r) {receiveClientInput(r.mDataBuffer); }); mReceiver.setHeaderAndCommandIds(HEADER_BLOB, COMMAND_BLOB); try { if (settings.getBool("server:connect", 0, true)) { mSendConnection.initialize(true, settings.getText("server:ip"), ds::value_to_string(settings.getInt("server:listen_port"))); mReceiveConnection.initialize(false, settings.getText("server:ip"), ds::value_to_string(settings.getInt("server:send_port"))); } } catch(std::exception &e) { DS_LOG_ERROR_M("EngineClient::EngineClient() initializing UDP: " << e.what(), ds::ENGINE_LOG); } setState(mClientStartedState); }
void LoadImageService::update() { Poco::Mutex::ScopedLock l(mMutex); for (int k=0; k<mOutput.size(); k++) { op& out = mOutput[k]; holder& h = mImageResource[out.mKey]; if(h.mTexture) { DS_LOG_WARNING_M("Duplicate images for id=" << out.mKey.mFilename << " refs=" << h.mRefs, LOAD_IMAGE_LOG_M); } else { ci::gl::Texture::Format fmt; if ((h.mFlags&ds::ui::Image::IMG_ENABLE_MIPMAP_F) != 0) { fmt.enableMipmapping(true); fmt.setMinFilter(GL_LINEAR_MIPMAP_LINEAR); } h.mTexture = ci::gl::Texture(out.mSurface, fmt); if (glGetError() == GL_OUT_OF_MEMORY) { DS_LOG_ERROR_M("LoadImageService::update() called on filename: " << out.mKey.mFilename << " received an out of memory error. Image may be too big.", LOAD_IMAGE_LOG_M); } DS_REPORT_GL_ERRORS(); } out.clear(); } mOutput.clear(); }