bool psServerVitals::SendStatDRMessage(uint32_t clientnum, EID eid, int flags, csRef<PlayerGroup> group) { bool backup=0; if (flags) { backup = statsDirty ? true : false; statsDirty = flags; } else if (version % 10 == 0) // every 10th msg to this person, send everything statsDirty = DIRTY_VITAL_ALL; if (!statsDirty) return false; csArray<float> fVitals; csArray<uint32_t> uiVitals; if (statsDirty & DIRTY_VITAL_HP) fVitals.Push(PERCENT_VALUE(VITAL_HITPOINTS)); if (statsDirty & DIRTY_VITAL_HP_RATE) fVitals.Push(PERCENT_RATE(VITAL_HITPOINTS)); if (statsDirty & DIRTY_VITAL_MANA) fVitals.Push(PERCENT_VALUE(VITAL_MANA)); if (statsDirty & DIRTY_VITAL_MANA_RATE) fVitals.Push(PERCENT_RATE(VITAL_MANA)); // Physical Stamina if (statsDirty & DIRTY_VITAL_PYSSTAMINA) fVitals.Push(PERCENT_VALUE(VITAL_PYSSTAMINA)); if (statsDirty & DIRTY_VITAL_PYSSTAMINA_RATE) fVitals.Push(PERCENT_RATE(VITAL_PYSSTAMINA)); // Mental Stamina if (statsDirty & DIRTY_VITAL_MENSTAMINA) fVitals.Push(PERCENT_VALUE(VITAL_MENSTAMINA)); if (statsDirty & DIRTY_VITAL_MENSTAMINA_RATE) fVitals.Push(PERCENT_RATE(VITAL_MENSTAMINA)); if (statsDirty & DIRTY_VITAL_EXPERIENCE) uiVitals.Push(GetExp()); if (statsDirty & DIRTY_VITAL_PROGRESSION) uiVitals.Push(GetPP()); psStatDRMessage msg(clientnum, eid, fVitals, uiVitals, ++version, statsDirty); if (group == NULL) msg.SendMessage(); else group->Broadcast(msg.msg); statsDirty = backup; return true; }
void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down) { const char *walk; char *outwalk = buffer; wireless_info_t info; INSTANCE(interface); const char *ip_address = get_ip_addr(interface); if (ip_address == NULL) { START_COLOR("color_bad"); outwalk += sprintf(outwalk, "%s", format_down); goto out; } if (get_wireless_info(interface, &info)) { walk = format_up; if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY) START_COLOR((info.quality < info.quality_average ? "color_degraded" : "color_good")); else START_COLOR("color_good"); } else { walk = format_down; START_COLOR("color_bad"); } for (; *walk != '\0'; walk++) { if (*walk != '%') { *(outwalk++) = *walk; continue; } if (BEGINS_WITH(walk+1, "quality")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY) { if (info.quality_max) outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.quality, info.quality_max)); else outwalk += sprintf(outwalk, "%d", info.quality); } else { *(outwalk++) = '?'; } walk += strlen("quality"); } if (BEGINS_WITH(walk+1, "signal")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_SIGNAL) { if (info.signal_level_max) outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.signal_level, info.signal_level_max)); else outwalk += sprintf(outwalk, "%d dBm", info.signal_level); } else { *(outwalk++) = '?'; } walk += strlen("signal"); } if (BEGINS_WITH(walk+1, "noise")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_NOISE) { if (info.noise_level_max) outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.noise_level, info.noise_level_max)); else outwalk += sprintf(outwalk, "%d dBm", info.noise_level); } else { *(outwalk++) = '?'; } walk += strlen("noise"); } if (BEGINS_WITH(walk+1, "essid")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_ESSID) outwalk += sprintf(outwalk, "%s", info.essid); else *(outwalk++) = '?'; walk += strlen("essid"); } if (BEGINS_WITH(walk+1, "ip")) { outwalk += sprintf(outwalk, "%s", ip_address); walk += strlen("ip"); } #ifdef LINUX if (BEGINS_WITH(walk+1, "bitrate")) { char br_buffer[128]; iw_print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate); outwalk += sprintf(outwalk, "%s", br_buffer); walk += strlen("bitrate"); } #endif } out: END_COLOR; OUTPUT_FULL_TEXT(buffer); }