MCPcopy Create free account
hub / github.com/TurningWheel/Barony / sendClientDataOverNet

Method sendClientDataOverNet

src/mod_tools.cpp:18650–18750  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18648std::map<int, std::string> Compendium_t::Events_t::clientDataStrings[MAXPLAYERS];
18649std::map<int, std::map<int, std::string>> Compendium_t::Events_t::clientReceiveData;
18650void Compendium_t::Events_t::sendClientDataOverNet(const int playernum)
18651{
18652 if ( multiplayer == SERVER ) {
18653 if ( playernum == 0 || client_disconnected[playernum] ) {
18654 return;
18655 }
18656
18657 if ( serverPlayerEvents[playernum].empty() )
18658 {
18659 return;
18660 }
18661
18662 rapidjson::Document d;
18663 d.SetObject();
18664 CustomHelpers::addMemberToRoot(d, "seq", rapidjson::Value(clientSequence));
18665 rapidjson::Value data(rapidjson::kObjectType);
18666 for ( auto& p1 : serverPlayerEvents[playernum] )
18667 {
18668 std::string key = std::to_string(p1.first);
18669 rapidjson::Value namekey(key.c_str(), d.GetAllocator());
18670 data.AddMember(namekey, rapidjson::Value(rapidjson::kObjectType), d.GetAllocator());
18671 auto& obj = data[key.c_str()];
18672 for ( auto& itemsData : p1.second )
18673 {
18674 rapidjson::Value itemKey(std::to_string(itemsData.first).c_str(), d.GetAllocator());
18675 obj.AddMember(itemKey, itemsData.second.value, d.GetAllocator());
18676 }
18677 }
18678 CustomHelpers::addMemberToRoot(d, "item", data);
18679
18680 rapidjson::StringBuffer os;
18681 rapidjson::Writer<rapidjson::StringBuffer> writer(os);
18682 d.Accept(writer);
18683 clientDataStrings[playernum][clientSequence] = os.GetString();
18684 auto& dataStr = clientDataStrings[playernum][clientSequence];
18685
18686 const size_t len = dataStr.size();
18687 if ( len == 0 )
18688 {
18689 return;
18690 }
18691
18692 serverPlayerEvents[playernum].clear();
18693
18694 // packet header
18695 memset(net_packet->data, 0, NET_PACKET_SIZE);
18696 memcpy(net_packet->data, "CMPD", 4);
18697 Uint8 sequence = 0;
18698 // encode name
18699 int chunksize = 256;
18700 const int numchunks = 1 + (len / chunksize);
18701 for ( int c = 0; c < len; c += chunksize )
18702 {
18703 sequence += 1;
18704
18705 if ( c + chunksize > len )
18706 {
18707 chunksize = len - c;

Callers

nothing calls this directly

Calls 6

stringCopyFunction · 0.85
sendPacketSafeFunction · 0.85
c_strMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected