저는 플러그인 아키텍처를 만들고 있습니다. 사용자는 자신 만의 플러그인을 만들 수 있으며, 사용자가 자신의 플러그인 설정을 protobuf
에 넣을 수 있도록 허용합니다 (사용자 유형을 알지 못합니다).protobuf-net의 동적 protobuf 메시지
PROTOS 메시지 :
message pbPlugin{
required string id = 1;
required string type = 2;
optional bytes settings = 3;
optional bytes settings_descriptor= 4;
}
message pbMyPluginSetting{
optional double exposure=1;
optional int32 pixel_clock=2;
}
서버 측 (C++) :
int main(int argc, char *argv[])
{
pbPlugin* pb_plugin;
pbMyPluginSetting plugin_settings; //it's user class i don't know it
plugin_settings.set_exposure(7);
plugin_settings.set_pixel_clock(28);
void *plugin_settings_buffer = malloc(plugin_settings.ByteSize());
plugin_settings.SerializeToArray(plugin_settings_buffer , plugin_settings.ByteSize());
pbPlugin->set_settings(plugin_settings_buffer , plugin_settings.ByteSize());
const Descriptor* desc=plugin_settings.GetDescriptor();
void *plugin_settings_desc_buffer = malloc(desc.ByteSize());
plugin_settings.SerializeToArray(plugin_settings_desc_buffer , desc.ByteSize());
pbPlugin->settings_descriptor(plugin_settings_desc_buffer , desc.ByteSize());
}
그래서 사용자가 자신의 protobuf
메시지를 제작하고 그가 그것을 직렬화하고 그가 pbPlugin
의 제기 설정을에 넣어됩니다 또한이 메시지 설명자를 직렬화합니다.
이제 클라이언트 측 (C# 응용 프로그램)에서 내 pbPlugin
메시지가 다시 전송되고 설정 필드를 deserialize하고 노출을 변경하고 pixel_clock
을 변경하려고합니다. 내 문제는 형식을 모른 채 메시지를 어떻게 deserialize 할 수 있는지 모르겠다는 것입니다. protobuf-net
에서 가능합니까?
C++에서 나는 직렬화 복원 설정을 넣어 메시지를 만들 내가 직렬화했습니다 기술자 및 DynamicMessageFactory
을 사용합니다.
DynamicMessageFactory dmf;
Message* actual_msg = dmf.GetPrototype(deserialized_descriptor)->New();
내가 액세스 필드의 값을 변경할 수 있습니다이 방법을. 어떻게 그것을 얻을 수 있습니까 protobuf-net
?