Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-5442

Separate client service calls into send/recv methods and make them public

    XMLWordPrintableJSON

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.14.0, 0.14.1, 0.14.2
    • Fix Version/s: 0.15.0
    • Component/s: netstd - Compiler
    • Labels:
    • Language:

      Description

      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).

      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);
      }

      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:

      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);

      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.

        Attachments

        1. multi-recv.7z
          39 kB
          S.P. IDEMIA

          Issue Links

            Activity

              People

              • Assignee:
                jensg Jens Geyer
                Reporter:
                spiisf S.P. IDEMIA
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m