Я использую следующую схему прото для взаимодействия с сервером. Python
Клиент использует WebSocket Client
для подключения.
syntax = "proto3";
package messages;
import "any.proto";
// ................................
message GeneralResponse {
oneof response {
MainResponseA registrationResponse = 1;
MainResponseB connectResponse = 2;
}
}
message MainResponseA {
bytes bytesA = 1;
int64 timeLeave = 2;
}
message GeneralMessage {
fixed32 identifier = 1;
oneof contents {
GeneralResponse response = 1;
GeneralState generalState = 2;
}
}
// ................................
После успешного подключения и нескольких запросов (все в порядке) я получаю следующий ответ соответствующим методом on_message
.
@staticmethod
def on_message(ws, message):
logging.debug("Source Message: %s \n \n", message)
// 2) This lines parse Message and only identifier,
// not inner Response Objects, with other info
gen_msg = messages.GeneralMessage()
gen_msg.ParseFromString(message)
logging.info('Received Msg: %s',
gen_msg)
В исходном сообщении, как вы можете видеть ниже, я получил большое закодированное сообщение.
�"�R�2018 12:38:22 PM Source Message:
�
� �PNG
IHDRk�XTPLTE���U��~�IDATx����n$+����wg����SW"��8�YXeW#H�?J)��RJ)��RJ)��RJ)��RJ)��RJ�V����3Փϼ?��+�|<��%�U��O��\����wW�`9����Z ����X�%XH0���c��Q.L`
����VXW������CDWh�|�
�3���$n-�io��P�fa��4� �廖���fP���V��O�Kf�X�``
)L�����g9�����=� ��v��2w��c���( �gk��#���SVa?�jc&Kp�7!~��IR�
// And so on ............
Позже, после разбора этого объекта на объект Protobuf, у меня есть только идентификатор! И никаких внутренних Объектов, где я предполагаю иметь поля bytesA
и timeLeave
. Есть идеи, что тут не так?
07/06/2018 12:38:22 PM Received Msg: identifier: 1387340418
response {
registrationResponse {
}
}