Comments (4)
After some experimentation, I figured out that it wasn't the pointer that was the problem, it was the initialization of the array!
GameStateMessage *message = (GameStateMessage*)client.CreateMessage(MessageType::GAME_STATE_MESSAGE);
message->arr = new int[global::MAX_PLAYERS];
for (int i = 0; i < global::MAX_PLAYERS; i++) {
message->arr[i] = i*2;
}
client.SendMessage(message, UNRELIABLE_UNORDERED_CHANNEL);
This is the client sending the array. Obviously, it declares the array, but when reading the array, it never got initialized!
So this example worked if forcing the array to be size 5:
struct GameStateMessage : public Message
{
int *arr = new short[5]; // Initalized for both sender and reciever
GameStateMessage() {}
template <typename Stream> bool Serialize( Stream & stream )
{
for (int i = 0; i < 5; i++) {
serialize_int(stream, arr[i], -390, 3700);
}
return true;
}
YOJIMBO_VIRTUAL_SERIALIZE_FUNCTIONS();
};
So, pointer array works, right? Well, the main problem is how the reader will know what the length will be. That's the entire point, right?
Taking some inspiration from the serialize_string
function, we just need to send the size FIRST! And then use that to dynamically allocate the received array:
struct GameStateMessage : public Message
{
const int MAX_ARRAY_SIZE = 64; // This is our theoretical highest array size
int *arr;
int length;
GameStateMessage() {}
template <typename Stream> bool Serialize( Stream & stream )
{
serialize_int( stream, length, 0, MAX_ARRAY_SIZE );
if (Stream::IsReading)
{
arr = new int[length];
}
for (int i = 0; i < length; i++) {
serialize_int(stream, arr[i], -390, 3700);
}
return true;
}
YOJIMBO_VIRTUAL_SERIALIZE_FUNCTIONS();
};
And this works! Tries sending {1, 2, 4, 6, 8}
, gets back out {1, 2, 4, 6, 8}
Thanks @Green-Sky for the little extra push to figure this out!
from yojimbo.
I recommend running with a debugger.
from yojimbo.
Remember to free the memory, or you have a memory leak in your hands.
Personally I would just go with std::vector
.
from yojimbo.
Ah, good point! Thanks!
Since this issue is taken care, I'll close it.
from yojimbo.
Related Issues (20)
- Question - NAT Punch-through HOT 2
- Failed to Create Message Type and Serialize check failed HOT 4
- Windows: cannot connect while other clients are timing out HOT 4
- Client connection refused if it's time is > server time HOT 1
- Message Types vs Data Blocks HOT 1
- Ignoring late packets HOT 1
- Working on improving the vcpkg integration: libsodium and mbedtls versions? HOT 9
- Intended use of client messages HOT 5
- Yojimbo linkage HOT 1
- Improve vcpkg usage experience HOT 4
- Large messages can clog ReliableOrderedChannel indefinitely HOT 3
- client.Disconnect() in loopback.cpp example HOT 2
- Building.md instructions not working for m1 mac HOT 3
- matcher docker doesn't seem to build anymore HOT 1
- Sending Large Block Sizes slow HOT 1
- NDA platforms HOT 1
- Problem with #if in yojimbo_reliable_ordered_channel.cpp HOT 2
- [Error] Building yojimbo gmake2 mingw HOT 6
- Packing messages into packets HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yojimbo.