PFakeSlave TFakeModbusContext::GetSlave(int slave_addr) { auto it = Slaves.find(slave_addr); if (it == Slaves.end()) { ADD_FAILURE() << "GetSlave(): slave not found, auto-creating: " << slave_addr; return AddSlave(slave_addr, PFakeSlave(new TFakeSlave)); } return it->second; }
PFakeSlave TFakeModbusConnector::AddSlave(const std::string& device, int slave_addr, const TRegisterRange& coil_range, const TRegisterRange& discrete_range, const TRegisterRange& holding_range, const TRegisterRange& input_range) { return AddSlave(device, slave_addr, PFakeSlave(new TFakeSlave(coil_range, discrete_range, holding_range, input_range))); }
CMistyFog::CMistyFog(int index, CWorldEffect *owner, bool buddy) : CWorldEffect(owner), mSize(0.05f*2.0f), mMinSize(0.05f*3.0f), mMaxSize(0.15f*2.0f), mAlpha(1.0f), mAlphaFade(false), mBuddy(buddy) { char name[1024]; unsigned char *pos; int x, y; if (mBuddy) { mRendering = false; // mImage = ((CMistyFog *)owner)->GetImage(); mData = ((CMistyFog *)owner)->GetData(); mWidth = ((CMistyFog *)owner)->GetWidth(); mHeight = ((CMistyFog *)owner)->GetHeight(); } else { sprintf(name, "gfx/world/fog%d.tga", index); R_LoadImage( name, &mData, &mWidth, &mHeight ); if (!mData) { ri.Error (ERR_DROP, "Could not load %s", name); } pos = mData; for(y=0;y<mHeight;y++) { for(x=0;x<mWidth;x++) { pos[3] = pos[0]; pos += 4; } } // mImage = R_CreateImage(name, mData, mWidth, mHeight, false, true, false, GL_REPEAT); mRendering = true; AddSlave(new CMistyFog(index, this, true)); } mSpeed = 90.0 + FloatRand() * 20.0; CreateTextureCoords(); }
CMistyFog2::CMistyFog2(void) : CWorldEffect(), mAlpha(0.3f), mFadeAlpha(0.0f) { int x, y; float xStep, yStep; AddSlave(new CMistyFog(2)); AddSlave(new CMistyFog(2)); xStep = 20.0f / (MISTYFOG_WIDTH-1); yStep = 20.0f / (MISTYFOG_HEIGHT-1); for(y=0;y<MISTYFOG_HEIGHT;y++) { for(x=0;x<MISTYFOG_WIDTH;x++) { mVerts[y][x][0] = -10 + (x * xStep) + ri.flrand(-xStep / 16.0, xStep / 16.0); mVerts[y][x][1] = 10 - (y * yStep) + ri.flrand(-xStep / 16.0, xStep / 16.0); mVerts[y][x][2] = -10; mColors[y][x][0] = 1.0; mColors[y][x][1] = 1.0; mColors[y][x][2] = 1.0; if (y < MISTYFOG_HEIGHT-1 && x < MISTYFOG_WIDTH-1) { mIndexes[y][x][0] = (y*MISTYFOG_WIDTH) + x; mIndexes[y][x][1] = (y*MISTYFOG_WIDTH) + x+1; mIndexes[y][x][2] = ((y+1)*MISTYFOG_WIDTH) + x+1; mIndexes[y][x][3] = ((y+1)*MISTYFOG_WIDTH) + x; } } } }
void Master::AddSlave(Channel* slave, RedisCommandFrame& cmd) { INFO_LOG("[Master]Recv sync command:%s", cmd.ToString().c_str()); slave->Flush(); SlaveConn& conn = GetSlaveConn(slave); if (!strcasecmp(cmd.GetCommand().c_str(), "sync")) { //Redis 2.6/2.4 send 'sync' conn.isRedisSlave = true; conn.sync_offset = -1; } else { conn.server_key = cmd.GetArguments()[0]; const std::string& offset_str = cmd.GetArguments()[1]; if (!string_toint64(offset_str, conn.sync_offset)) { ERROR_LOG("Invalid offset argument:%s", offset_str.c_str()); slave->Close(); return; } conn.isRedisSlave = true; for (uint32 i = 2; i < cmd.GetArguments().size(); i += 2) { if (cmd.GetArguments()[i] == "cksm") { conn.isRedisSlave = false; if (!string_touint64(cmd.GetArguments()[i + 1], conn.sync_cksm)) { ERROR_LOG("Invalid checksum argument:%s", cmd.GetArguments()[i + 1].c_str()); slave->Close(); return; } } } } slave->GetService().DetachChannel(slave, true); if (g_repl->GetIOServ().IsInLoopThread()) { AddSlave(&conn); } else { g_repl->GetIOServ().AsyncIO(0, OnAddSlave, &conn); } }