Enfernuz / quik-lua-rpc

RPC-сервис для вызова API Lua-библиотеки торгового терминала QUIK (ARQA Technologies)
Apache License 2.0
103 stars 43 forks source link

Сломана обработка сделок в Quik 8.8.4 #47

Closed Abrosimov-a-a closed 3 years ago

Abrosimov-a-a commented 4 years ago

При обработке сделок возникает ошибка:

...lua\quik-lua-rpc/impl\protobuf_event_data_serializer.lua:25: bad argument #2 to 'encode' (string expected for field 'uid', got number)

Я не смогу заняться этой проблемой раньше середины следующей недели.

Abrosimov-a-a commented 4 years ago

Так работает.

diff --git a/qlua/rpc/qlua_structures.proto b/qlua/rpc/qlua_structures.proto
index 807559c..9f45522 100644
--- a/qlua/rpc/qlua_structures.proto
+++ b/qlua/rpc/qlua_structures.proto
@@ -109,7 +109,7 @@ message Trade {
     DateTimeEntry canceled_datetime = 45; // TABLE in QLUA
     string clearing_firmid = 46;
     string system_ref = 47;
-    string uid = 48; // NUMBER in QLUA
+    int64 uid = 48; // NUMBER in QLUA
     string lseccode = 49;
     string order_revision_number = 50; // NUMBER in QLUA
     string order_qty = 51; // NUMBER in QLUA
Enfernuz commented 4 years ago

Странно, раньше работало. pb.dll из каких исходников был собран?

Я спецом тут string влепил, чтобы если поменяют тип поля в QLua, то чтоб ничего не сломалось :D

Abrosimov-a-a commented 4 years ago

Dll'и не менялись.

Enfernuz commented 4 years ago

@Abrosimov-a-a ответь в ВК, пожалуйста, на досуге :)

Enfernuz commented 3 years ago

Пофиксил. Думаю, что таких мест там ещё много. Надо будет проверить все поля, тип которых в сервисе поменян на string в отличие от QLua. Точно не помню, но, кажется, когда я всё это писал, lua-protobuf успешно справлялся с такого рода конверсиями самостоятельно. Сейчас, скорее всего, ошибка будет возникать только для инициализированных таких полей, ибо неинициализированные в пришедшей таблице не встречаются и поэтому не вызывают у энкодера проблем.