zoukankan      html  css  js  c++  java
  • Transfering Stream Data using Remote Functions

    Author Transfering Stream Data using Remote Functions
    Danijel Tkalcec [RTC]

    01.06.2006 21:17:27
    Registered user
    You can send streams with remote functions (limited length, since all data has to be kept in memory while sending and receiving) by using newByteStream to create the in-memory Stream, then using asByteStream (this is a TMemoryStream) to read/write data from the stream.

    If you have components which write to a memory stream, you can pass “asByteSteam” as a parameter to those components methods/functions, so they can directly fill their content into the stream. On the other side, when the stream arrives, you can use “asByteStream” to access the data received.

    Here are some examples …

    EXAMPLE 1: Send a stream from a client to the server as a parameter in a remote function call …

    On the client-side, to call the remote function, passing the stream as a parameter:
    with myClientModule do
      begin
      with Data.newFunction(’callme’) do
        begin
        newByteStream(’mydata’);
        Some_Function_which_fills_the_stream(asByteStream[’mydata’]);
        end;
      Call(myResult);
      end;

    And on the server side (OnExecute event), you can access all data inside your stream like this:
    // need to make sure this parameter is a ByteStream …
    if isType[’mydata’]=rtc_ByteStream then
      Some_Function_which_reads_from_stream(asByteStream[’mydata’]);

    EXAMPLE 2: Send a stream as a result of a function call from the Server to the Client.

    In server’s OnExecute event, create the stream and fill it with data:
    Result.newByteStream;
    Some_Function_which_fills_the_stream(Result.asByteStream);

    And on the Client side (OnReturn event), you can access all data inside your stream like this:
    // need to make sure this parameter is a ByteStream …
    if Result.isType=rtc_ByteStream then
      Some_Function_which_reads_from_stream(Result.asByteStream);

    EXAMPLE 3: Send a stream from Server’s OnExecute event as a result of a remote function call, now packed inside a record, so you can supply more information about data in that stream.

    On the Server-side, you can write something like this:
    with Result.newRecord do
      begin
      newByteStream(’mydata’);
      Some_Function_which_fills_the_stream(asByteStream[’mydata’]);
      end;

    And on the Client side (OnReturn event), you can access all data inside your stream like this:
    // need to make sure this parameter is a Record …
    if Result.isType=rtc_Record then
      with Result.asRecord do
        begin
        // need to make sure this parameter is a ByteStream …
        if isType[’mydata’]=rtc_ByteStream then
          Some_Function_which_reads_from_stream(asByteStream[’mydata’]);
        end;
  • 相关阅读:
    23. 霍纳法则(多项式求值快速算法)
    22. 欧几里德算法(求最大公约数GCD)
    [poj 2106] Boolean Expressions 递归
    [poj 1185] 炮兵阵地 状压dp 位运算
    [MOOC程序设计与算法二] 递归二
    [poj 3254] Corn Fields 状压dp
    [hdu 1074] Doing Homework 状压dp
    [hdu 1568] Fibonacci数列前4位
    [haut] 1281: 邪能炸弹 dp
    [hdu 2604] Queuing 递推 矩阵快速幂
  • 原文地址:https://www.cnblogs.com/liangchua/p/6594639.html
Copyright © 2011-2022 走看看