PUBLIC MprList *mprListRegistry(cchar *key) { HKEY top, h; wchar name[ME_MAX_PATH]; MprList *list; int index, size; assert(key && *key); /* Get the registry hive */ if ((key = getHive(key, &top)) == 0) { return 0; } if (RegOpenKeyEx(top, wide(key), 0, KEY_READ, &h) != ERROR_SUCCESS) { return 0; } list = mprCreateList(0, 0); index = 0; while (1) { size = sizeof(name) / sizeof(wchar); if (RegEnumValue(h, index, name, &size, 0, NULL, NULL, NULL) != ERROR_SUCCESS) { break; } mprAddItem(list, sclone(multi(name))); index++; } RegCloseKey(h); return list; }
int mprReadRegistry(char *key, char *name, char **buf, int max) { HKEY top, h; char *value; ulong type, size; mprAssert(key && *key); mprAssert(buf); // // Get the registry hive // if ((key = getHive(key, &top)) == 0) { return MPR_ERR_CANT_ACCESS; } if (RegOpenKeyEx(top, key, 0, KEY_READ, &h) != ERROR_SUCCESS) { return MPR_ERR_CANT_ACCESS; } // // Get the type // if (RegQueryValueEx(h, name, 0, &type, 0, &size) != ERROR_SUCCESS) { RegCloseKey(h); return MPR_ERR_CANT_READ; } if (type != REG_SZ && type != REG_EXPAND_SZ) { RegCloseKey(h); return MPR_ERR_BAD_TYPE; } value = (char*) mprMalloc(size); if ((int) size > max) { RegCloseKey(h); return MPR_ERR_WONT_FIT; } if (RegQueryValueEx(h, name, 0, &type, (uchar*) value, &size) != ERROR_SUCCESS) { delete value; RegCloseKey(h); return MPR_ERR_CANT_READ; } RegCloseKey(h); *buf = value; return 0; }
void WorkerBee::onEnterState(State state) { if (state == IN_HIVE) { setMoveState(MoveState::AT_REST); } else if (state == COLLECT_POLLEN) { setDebugStatus("collecting_pollen"); setMoveState(MoveState::AT_REST); } else if (state == TO_FLOWER) { setMoveState(MoveState::TARGET); } else if (state == RETURN_HIVE) { setDebugStatus("back_to_hive"); setMoveTarget(getHive().getPosition()); setMoveState(MoveState::TARGET); } }
int mprWriteRegistry(MprCtx ctx, cchar *key, cchar *name, cchar *value) { HKEY top, h, subHandle; ulong disposition; mprAssert(key && *key); mprAssert(name && *name); mprAssert(value && *value); /* * Get the registry hive */ if ((key = getHive(key, &top)) == 0) { return MPR_ERR_CANT_ACCESS; } if (name) { /* * Write a registry string value */ if (RegOpenKeyEx(top, key, 0, KEY_ALL_ACCESS, &h) != ERROR_SUCCESS) { return MPR_ERR_CANT_ACCESS; } if (RegSetValueEx(h, name, 0, REG_SZ, value, (int) strlen(value) + 1) != ERROR_SUCCESS) { RegCloseKey(h); return MPR_ERR_CANT_READ; } } else { /* * Create a new sub key */ if (RegOpenKeyEx(top, key, 0, KEY_CREATE_SUB_KEY, &h) != ERROR_SUCCESS) { return MPR_ERR_CANT_ACCESS; } if (RegCreateKeyEx(h, name, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &subHandle, &disposition) != ERROR_SUCCESS) { return MPR_ERR_CANT_ACCESS; } RegCloseKey(subHandle); } RegCloseKey(h); return 0; }
PUBLIC char *mprReadRegistry(cchar *key, cchar *name) { HKEY top, h; char *value; ulong type, size; assert(key && *key); /* Get the registry hive */ if ((key = getHive(key, &top)) == 0) { return 0; } if (RegOpenKeyEx(top, wide(key), 0, KEY_READ, &h) != ERROR_SUCCESS) { return 0; } /* Get the type */ if (RegQueryValueEx(h, wide(name), 0, &type, 0, &size) != ERROR_SUCCESS) { RegCloseKey(h); return 0; } if (type != REG_SZ && type != REG_EXPAND_SZ) { RegCloseKey(h); return 0; } if ((value = mprAlloc(size + 1)) == 0) { return 0; } if (RegQueryValueEx(h, wide(name), 0, &type, (uchar*) value, &size) != ERROR_SUCCESS) { RegCloseKey(h); return 0; } RegCloseKey(h); value[size] = '\0'; return value; }
void WorkerBee::onState(State state, sf::Time dt) { Vec2d empty(-1.0, -1.0); // first state if (state == IN_HIVE) { // if bee has pollen transfer it to hive if (getPollen() > 0) { transferPollen(dt); flower_location_ = empty; setDebugStatus("in_hive_leaving_pollen"); } else { // if bee has not enough energy to leave hive, eat its nectar if (getEnergy() < energy_leave_hive_ && getHive().getNectar() > 0) { setDebugStatus("in_hive_eating"); eatFromHive(dt); } // if there is a flower in memory and enough energy, target move // to this flower else if (flower_location_ != empty && getEnergy() > energy_collect_pollen_) { setDebugStatus("in_hive_leaving"); setMoveTarget(flower_location_); // change state to to flower nextState(); } else { setDebugStatus("in_hive_no_flower"); } } } // second state else if (state == TO_FLOWER) { setDebugStatus("to_flower"); if (getEnergy() < energy_collect_pollen_) { nextState(); nextState(); } Flower* flower = getAppEnv().getCollidingFlower(getVisionRange()); if (flower) { setMoveTarget(flower->getPosition()); setMoveState(MoveState::TARGET); if (isPointInside(flower->getPosition())) { nextState(); } } else if (isPointInside(flower_location_)) { // go back to hive and clear location nextState(); nextState(); setFlowerLocation(Vec2d(-1,-1)); } } // third state else if (state == COLLECT_POLLEN) { // if there is a flower at flower location and it has pollen and // bee has not enough pollen, eat pollen from flower Flower* flower(getAppEnv().getCollidingFlower(getCollider())); if ((getPollen() < max_pollen_) && (flower != nullptr) && (flower->getPollen() > 0)) { eatPollen(flower, dt); } else { // else skip collection nextState(); } } else if (state == RETURN_HIVE) { // if bee is in hive change state to in hive if (getHive().isColliderInside(getCollider())) { nextState(); } } }