diff --git a/src/DedicatedServer.cpp b/src/DedicatedServer.cpp index 5821293..725d7d6 100644 --- a/src/DedicatedServer.cpp +++ b/src/DedicatedServer.cpp @@ -110,7 +110,7 @@ namespace Feather { Log::Info("Client Intention Packet: version={}, serverIp={}, port={}, intention={}\n", handshake.protocolVersion, - handshake.serverIP.c_str(), + handshake.serverIP.data(), handshake.port, handshake.intention ); @@ -154,7 +154,8 @@ namespace Feather // .uuid = { 4658857991808325907ull, 7518717155607718277ull }, // .username = start.username //}; - client.SetUsername(start.username); + // TODO: This is copying... + client.SetUsername(std::string(start.username)); std::string uuid = "ecb99913-96a8-40a7-8529-a2ca6ad95768"; Login::ClientboundSuccess success = diff --git a/src/NetworkMessage.h b/src/NetworkMessage.h index 31202a7..127988c 100644 --- a/src/NetworkMessage.h +++ b/src/NetworkMessage.h @@ -74,11 +74,18 @@ namespace Feather WriteData(string, stringSize); } + // Write string using std::string reference inline void WriteString(const std::string& string) { WriteString(string.c_str(), string.length()); } + // Write string using string_view + inline void WriteString(std::string_view view) + { + WriteString(view.data(), view.size()); + } + inline void WritePosition(BlockPos pos) { Write(pos.Encode()); diff --git a/src/PacketReader.h b/src/PacketReader.h index b02913f..93b6b24 100644 --- a/src/PacketReader.h +++ b/src/PacketReader.h @@ -92,6 +92,7 @@ namespace Feather return static_cast(result); } + // can be assigned to string&, string_view string ReadString() { int size = ReadVarInt(); diff --git a/src/protocol/generate_protocol.py b/src/protocol/generate_protocol.py index 20f534d..764841f 100644 --- a/src/protocol/generate_protocol.py +++ b/src/protocol/generate_protocol.py @@ -299,10 +299,7 @@ def print_definition(types, name, value, serverbound): add_text('}} {};', resolved_name) else: resolved_type = resolve_type(types, value) - if not serverbound and resolved_type == 'std::string': - add_text('const {}& {};', resolved_type, resolved_name) - else: - add_text('{} {};', resolved_type, resolved_name) + add_text('{} {};', resolved_type, resolved_name) def get_enum_type(dict, fallback = 'int32'): diff --git a/src/protocol/protocol.hjson b/src/protocol/protocol.hjson index 8ade0a9..caeb62e 100644 --- a/src/protocol/protocol.hjson +++ b/src/protocol/protocol.hjson @@ -20,7 +20,7 @@ } string: { - type: std::string + type: std::string_view method: String // requires count: e.g. string[256] // generated C type will not be an array