Exemplo n.º 1
0
        /// <summary>
        /// 戻り値を値で取得する通信処理。
        /// 通信基本形。
        /// </summary>
        /// <param name="invoker">呼び出し元。</param>
        /// <param name="friendlyConnector">アプリケーションとの接続者。</param>
        /// <param name="protocolType">通信タイプ。</param>
        /// <param name="operationTypeInfo">操作タイプ情報。</param>
        /// <param name="varAddress">変数アドレス。</param>
        /// <param name="typeFullName">タイプフルネーム。</param>
        /// <param name="operation">操作名称。</param>
        /// <param name="arguments">引数。</param>
        /// <returns>値。</returns>
        internal static object SendAndValueReceive(object invoker, IFriendlyConnector friendlyConnector, ProtocolType protocolType,
            OperationTypeInfo operationTypeInfo, VarAddress varAddress, string typeFullName, string operation, object[] arguments)
        {
            //配列の場合の調整
            arguments = AdjustArrayArgs(arguments);

            ReturnInfo ret = friendlyConnector.SendAndReceive(new ProtocolInfo(protocolType, operationTypeInfo, varAddress, typeFullName, operation, ConvertAppVar(friendlyConnector, arguments)));
            GC.KeepAlive(invoker);
            GC.KeepAlive(friendlyConnector);
            for (int i = 0; i < arguments.Length; i++)
            {
                if (arguments[i] != null)
                {
                    GC.KeepAlive(arguments[i]);
                }
            }
            if (ret.Exception != null)
            {
                throw new FriendlyOperationException(ret.Exception);
            }
            return ret.ReturnValue;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 戻り値を値で取得する通信処理。
        /// 通信基本形。
        /// </summary>
        /// <param name="invoker">呼び出し元。</param>
        /// <param name="friendlyConnector">アプリケーションとの接続者。</param>
        /// <param name="protocolType">通信タイプ。</param>
        /// <param name="operationTypeInfo">操作タイプ情報。</param>
        /// <param name="varAddress">変数アドレス。</param>
        /// <param name="typeFullName">タイプフルネーム。</param>
        /// <param name="operation">操作名称。</param>
        /// <param name="arguments">引数。</param>
        /// <returns>値。</returns>
        internal static object SendAndValueReceive(object invoker, IFriendlyConnector friendlyConnector, ProtocolType protocolType,
                                                   OperationTypeInfo operationTypeInfo, VarAddress varAddress, string typeFullName, string operation, object[] arguments)
        {
            //配列の場合の調整
            arguments = AdjustArrayArgs(arguments);

            ReturnInfo ret = friendlyConnector.SendAndReceive(new ProtocolInfo(protocolType, operationTypeInfo, varAddress, typeFullName, operation, ConvertAppVar(friendlyConnector, arguments)));

            GC.KeepAlive(invoker);
            GC.KeepAlive(friendlyConnector);
            for (int i = 0; i < arguments.Length; i++)
            {
                if (arguments[i] != null)
                {
                    GC.KeepAlive(arguments[i]);
                }
            }
            if (ret.Exception != null)
            {
                throw new FriendlyOperationException(ret.Exception);
            }
            return(ret.ReturnValue);
        }