How to split an ice request

AlexandreAlexandre Lyon, FranceMember HaffnerOrganization: Single ShadeProject: VR & robotics.

Hello everyone,

I've been struggling today on one issue and I'd like to know if what I want is even possible.
Before the question, here is a quick summary.

Basically I've got a simple system sending and receiving "Messages".

// Base message class.
class Message
{
    MessageType type; 
}

Every message of my system inherits from this class. The MessageType allows me, when a message is received, to downcast the received Message to its proper class, for example:

class UpdateEntityBoundsMessage extends Message
{
    int uid;
    BoundingBox bounds;
}

I've create a simple system to allow for message batching using the following slice:

sequence<Message> MessageList;
class MessageBatch extends Message
{
    MessageList messages;
}

When I receive a MessageBatch, I simply iterate through all messages, downcast them, and process.

Now the actual question: I'm trying to do the opposite of batching, ie. splitting the data into smaller chunks, if the message size exceeds the max payload size. I don't want to make the maximum payload size too big.

I'm trying to prototype something that would look like:

class MessageChunk extends Message
{
    int messageUid;
    int chunkCount;
    int chunkId;
    ByteArray data;
}

Where one can send a bigger message into smaller chunks of data. But since messages are not structs, I don't see any way to convert a message to a byte array... besides adding another serialization layer.

Is there any easy way with ice to do the same thing with a builtin feature?
Is there any way with ice to serialize a message to a byte array ?

Hope this is clear enough and someone can help with that.
I'd hate to have to come to a splitting mechanism per message type, and would prefer to have that on the base class.

Thank you,
Keep up the good work !

Best Answer

  • xdmxdm La Coruña, SpainJose Gutierrez de la ConchaOrganization: ZeroC, Inc.Project: Ice Developer ZeroC Staff
    Accepted Answer

    Hi,

    There is not a built-in feature that allows splitting a big request in chunks, however, Ice provides a streaming interface that allows you to serialize deserialize any types defined in Slice, see https://doc.zeroc.com/display/IceMaster/Streaming+Interfaces

Answers

  • xdmxdm La Coruña, SpainAdministrators, ZeroC Staff Jose Gutierrez de la ConchaOrganization: ZeroC, Inc.Project: Ice Developer ZeroC Staff
    Accepted Answer

    Hi,

    There is not a built-in feature that allows splitting a big request in chunks, however, Ice provides a streaming interface that allows you to serialize deserialize any types defined in Slice, see https://doc.zeroc.com/display/IceMaster/Streaming+Interfaces

  • AlexandreAlexandre Lyon, FranceMember HaffnerOrganization: Single ShadeProject: VR & robotics.

    Thank you for the link. I think that will do the job just fine! Cheers

Sign In or Register to comment.