You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2021/09/11 12:32:02 UTC
[jira] [Closed] (THRIFT-5442) Separate client service calls into
send/recv methods and make them public
[ https://issues.apache.org/jira/browse/THRIFT-5442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Geyer closed THRIFT-5442.
------------------------------
> Separate client service calls into send/recv methods and make them public
> -------------------------------------------------------------------------
>
> Key: THRIFT-5442
> URL: https://issues.apache.org/jira/browse/THRIFT-5442
> Project: Thrift
> Issue Type: New Feature
> Components: netstd - Compiler
> Affects Versions: 0.14.0, 0.14.1, 0.14.2
> Reporter: S.P. IDEMIA
> Assignee: Jens Geyer
> Priority: Major
> Labels: features
> Fix For: 0.15.0
>
> Attachments: multi-recv.7z
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> The 'csharp' library and target have been deprecated in version 0.13.0, and removed in version 0.14.0, with the indication that the 'netstd' target is its replacement.
> However, the netstd target is missing some features that were present in the 'csharp' target, which can make the migration difficult or impossible.
> One such use case is when a server sends a sequence of replies for a single command call by a client, e.g. to provide a stream of live data or progress updates without constant polling from the client.
> Here is a minimal example, where a device regularly sends information about its firmware upgrade process, to provide a status display on the controlling client, and to indicate when the device can be rebooted (on the new firmware).
> {code:c++|title=minimal.thrift}
> struct upgrade_progress {
> 1: required i8 percent;
> 2: optional string current_action;
> 3: optional bool finished = false;
> }
> service multi_recv
> {
> upgrade_progress firmware_upgrade(1: binary firmware);
> }{code}
> Here, the device (server) sends multiple replies, all of type `upgrade_progress`, until the operation ends (for whatever reason).
> On the PC (client) side, depending on the client software, we use either the 'csharp' or 'cpp' targets, relying on the public {{client.send_command_name}} and {{client.recv_command_name}} methods which are generated alongside {{client.command_name}}, allowing an easy handling of this kind of process:
> {code:c#|title=Program.cs}
> client.send_firmware_upgrade(firmware);
> do
> {
> var res = client.recv_firmware_upgrade();
> // Display progression using res.Percent & res.Current_action
> upgrade_done = res.__isset.finished && res.Finished.Value;
> } while (!upgrade_done);{code}
> Unfortunately, the 'netstd' target does not generate these methods resulting in an incomplete replacement of the 'csharp' target.
>
> [^multi-recv.7z] contains the complete client for the described interface.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)