远程调用内核接口(remote call kernel)

本文档介绍了远程调用内核(RCK)的概念、架构和主要组件,如RCKSlot、Application、Function、Connection等。RCK专注于数据组织,而通讯适配层由第三方实现,支持TCP、共享内存等多种通讯方式。通过RC提供的自环和网络接口,可以进行进程内和进程间的函数调用。
摘要由CSDN通过智能技术生成

--------------------------------------------------------------------------------
标题: 远程调用内核接口(remote call kernel)
作者: 叶飞虎
版本: 5.0.0.0
日期: 2014.07.07
--------------------------------------------------------------------------------

1. 概述
    RCK(remote call kernel 缩写)为远程调用内核, 其通讯协议为自定义数据流协议。
RCK 负责远程调用过程中的数据组织, 并不关心实际物理通讯协议, 实则属于逻辑层通讯
协议。

    RCK 通讯槽接口(RCKSlot)负责数据接收和发送, 属于通讯的适配层, 由第三方来实现
实际的数据传输接口。

    RCK 包含 Application, Function, Connection, Command, Response 和 Fields 六
大类, 其主要功能如下:
    a. Application 类主要负责 Function 的组织和 Response 的分发执行;
    b. Function    类主要负责 Function 的定义及按各模式调用;
    c. Connection  类主要负责登录对端应用, Command 请求执行, Response 应答管理,
       以及发送和接收数据等等;
    d. Command     类主要负责函数参数传入, 以及返回值和返回字段值读取;
    e. Response    类主要负责对端指定 Function 请求的执行处理, 如参数读取、返回
       值编辑及提交;
    f. Fields      类主要负责数据库字段值及定义集的组包和拆包。

 

    RC 5.0 下载地址: http://download.csdn.net/detail/kyee/7610527

 

2. RCK 通讯槽接口定义
    参见 <RCKSlot.h> 文件

 

// =======================================
// Unit   : RCK Slot (RCK 通讯槽接口)
// Version: 5.0.0.0 (build 2014.07.07)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _RCKSlot_H_
#define _RCKSlot_H_

namespace RCKernel
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 常量定义 */

// 返回值及错误码
enum TRCKResult
        {krSuccess         =  1,       // 成功
         krFailure         =  0,       // 失败
         krUnknown         = -1,       // 未知错误
         krNotExist        = -2,       // 不存在(如: 连接对象)
         krNotConnect      = -3,       // 连接未打开
         krNonsupport      = -4,       // 不支持
         krVersion         = -5,       // 版本不兼容
         krTimeout         = -6,       // 操作超时
         krPassword        = -7,       // 密码错误
         krIsExisted       = -8,       // 已存在
         krIsRefused       = -9,       // 被拒绝
         krIsIllegal       = -10,      // 不合法
         krIsNullName      = -11,      // 名字为空
         krAttrInvalid     = -12,      // 属性无效
         krStateInvalid    = -13,      // 状态无效
         krHandleInvalid   = -14,      // 句柄无效
         krAccessIllegal   = -15};     // 存取非法

// 通讯槽的属性项
enum TRCKSlotAttrib
        {ksaError          = 0,        // 通讯槽打开失败的错误信息
         ksaState          = 1,        // 通讯槽的状态
         ksaConnObj        = 2,        // 通讯槽的绑定连接对象
         ksaCurrAddr       = 3,        // 通讯槽的本地地址
         ksaCurrPort       = 4,        // 通讯槽的本地端口号
         ksaPeerAddr       = 5,        // 通讯槽的对端地址
         ksaPeerPort       = 6,        // 通讯槽的对端端口号
         ksaSlotMaxSize    = 7,        // 通讯槽的数据包最大长度, 默认值: 8192

         // 回调事件属性, 取值范围: [32..63]
         ksaOnDisconnect   = 32,       // 通讯槽的 OnDisconnect 事件, 断开通讯(TRCKSlotOnEvent)
         ksaOnRecvEvent    = 33,       // 通讯槽的 OnRecvEvent  事件, 接收事件(TRCKSlotOnEvent)
         ksaOnRecvData     = 34,       // 通讯槽的 OnRecvData   事件, 接收数据(TRCKSlotOnRecvData)

         // 扩展属性基数
         ksaBaseExtended   = 0x10000}; // 通讯槽的扩展属性基数: 扩展属性项
                                       // (注: 扩展属性项必须小于 0x10000)

// 通讯槽的状态
enum TRCKSlotState
        {kssInactive       = 0,        // 未打开
         kssClosing        = 1,        // 正在关闭
         kssOpening        = 2,        // 正在打开
         kssOpened         = 3};       // 已经打开

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 通讯槽对象的函数类型定义 */

// 操作通讯槽的函数类型
typedef void  (__stdcall *TRCKSlotOp)(void* ASlotObj);

// 打开通讯槽的函数类型(返回值定义为 TRCKResult)
typedef long  (__stdcall *TRCKSlotOpen)(void* ASlotObj, long ATimeout);

// 接收数据的函数类型(返回值为接收成功的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotRecv)(void* ASlotObj, void* AData, long ASize);

// 发送数据的函数类型(返回值为发送成功的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotSend)(void* ASlotObj, const void* AData, long ASize);

// 可以发送的函数类型(返回值为可以发送的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotCanSend)(void* ASlotObj, long ASize);

// 取通讯槽整型属性的函数类型(返回值为属性值, ARetCode 为失败的返回码, 允许为空)
typedef long  (__stdcall *TRCKSlotGetInt)(void* ASlotObj, long Attrib, long* ARetCode);

// 取通讯槽指针属性的函数类型(返回值为属性值, ARetCode 为失败的返回码, 允许为空)
typedef void* (__stdcall *TRCKSlotGetObj)(void* ASlotObj, long Attrib, long* ARetCode);

// 取通讯槽字符串属性的函数类型(返回值为属性值, ARetCode 成功时为属性值尺寸, 否则为返回码, 允许为空)
typedef char* (__stdcall *TRCKSlotGetStr)(void* ASlotObj, long Attrib, long* ARetCode);

// 设置通讯槽整型属性的函数类型
typedef long  (__stdcall *TRCKSlotSetInt)(void* ASlotObj, long Attrib, long  AValue);

// 设置通讯槽指针属性的函数类型
typedef long  (__stdcall *TRCKSlotSetObj)(void* ASlotObj, long Attrib, void* AValue);

// 设置通讯槽字符串属性的函数类型
typedef long  (__stdcall *TRCKSlotSetStr)(void* ASlotObj, long Attrib,
                                    const char* AValue,   long ASize);

// 通讯槽对象事件的回调函数类型
typedef void  (__stdcall *TRCKSlotOnEvent)(void* ASlotObj, void* AConnObj);

// 通讯槽对象 OnRecvData 事件的回调函数类型
// 注: 若 Recv 方法为 NULL 则通过 OnRecvData 事件接收数据,
//     否则通过 OnRecvEvent  事件来调用 Recv 方法接收数据.
typedef void  (__stdcall *TRCKSlotOnRecvData)(void* ASlotObj, void* AConnObj,
                                        const void* AData,    long  ASize);

// 通讯槽对象的方法列表
#pragma pack(push, 1)
typedef struct
{
   long              Size;             // = sizeof(TRCKSlotMethods)

   TRCKSlotOpen      Open;             // 打开通讯槽
   TRCKSlotOp        Close;            // 关闭通讯槽
   TRCKSlotOp        FreeObj;          // 释放通讯槽对象

   TRCKSlotRecv      Recv;             // 接收数据
   TRCKSlotSend      Send;             // 发送数据
   TRCKSlotCanSend   CanSend;          // 可以发送的数据尺寸

   TRCKSlotGetInt    GetInt;           // 取通讯槽整型属性
   TRCKSlotGetObj    GetObj;           // 取通讯槽指针属性
   TRCKSlotGetStr    GetStr;           // 取通讯槽字符串属性

   TRCKSlotSetInt    SetInt;           // 设置通讯槽整型属性
   TRCKSlotSetObj    SetObj;           // 设置通讯槽指针属性
   TRCKSlotSetStr    SetStr;           // 设置通讯槽字符串属性
} TRCKSlotMethods, *PRCKSlotMethods;
#pragma pack(pop)

}

#endif


3. RCK 接口定义
    参见 <RCKernel.h> 文件

 

// =======================================
// Unit   : RC Kernel
// Version: 5.0.0.0 (build 2014.07.07)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _RCKernel_H_
#define _RCKernel_H_

#include "RCKSlot.h"

#pragma comment(lib, "RCKernel.lib")

namespace RCKernel
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 常量定义 */

// 数据类型
enum TRCKDataType
        {kdtNone           = 0,        // 无类型
         kdtString         = 1,        // 字符串类型  (自定义尺寸)
         kdtInteger        = 2,        // 整型类型    (4 Bytes)
         kdtBoolean        = 3,        // 布尔类型    (1 Bytes)
         kdtDouble         = 4,        // 浮点类型    (8 Bytes)
         kdtStruct         = 5,        // 结构类型    (自定义尺寸)
         kdtByte           = 6,        // 字节        (1 Bytes)
         kdtWord           = 7,        // 双字节      (2 Bytes)
         kdtSmallint       = 8,        // 16位整型    (2 Bytes)
         kdtInt64          = 9,        // 64位整型    (8 Bytes)
         kdtDateTime       = 10,       // 日期时间类型(8 Bytes)
         kdtCurrency       = 11};      // 货币类型    (8 Bytes)

// 接口的属性项
enum TRCKAttrib
        {kaVersion         = 0,        // 接口版本信息, 格式: "x.x.x.x (build yyyy.mm.dd)"
         kaAppCount        = 1,        // 应用个数
         kaCmdCount        = 2,        // 命令个数
         kaConnCount       = 3,        // 连接个数
         kaDealThreads     = 4,        // 处理线程最大个数, 默认值: 16
         kaDealCacheSize   = 5,        // 处理线程缓冲池尺寸, 默认值: 16
         kaSendThreads     = 6,        // 发送线程最大个数, 默认值: 8
         kaSendCacheSize   = 7,        // 发送线程缓冲池尺寸, 默认值: 8

         // 扩展属性基数
         kaBaseAppObj      = 0x10000,  // 应用索引基数: 应用对象
         kaBaseAppName     = 0x20000,  // 应用索引基数: 应用名
         kaBaseConnObj     = 0x40000}; // 连接索引基数: 连接对象

// 应用的属性项
enum TRCKAppAttrib
        {kaaData           = 0,        // 自定义数据
         kaaName           = 1,        // 应用名
         kaaState          = 2,        // 应用的状态
         kaaPassword       = 3,        // 应用的密码
         kaaFuncCount      = 4,        // 应用的函数个数
         kaaConnCount      = 5,        // 应用的已连接数
         kaaMaxThreads     = 6,        // 应用的回调函数处理线程最大个数, 默认值: 8
         kaaMaxConnCount   = 7,        // 应用的最大连接个数, 默认值: 0 表示无限制

         // 回调事件属性, 取值范围: [32..63]
         kaaOnConnLogin    = 32,       // 应用的 OnConnLogin   事件, 连接登录(TRCKOnAppLogin)
         kaaOnConnLogout   = 33,       // 应用的 OnConnLogout  事件, 连接登出(TRCKOnAppLogout)
         kaaOnExecResp     = 34,       // 应用的 OnExecResp    事件, 执行应答(TRCKOnAppResp)
         kaaOnRespCancel   = 35,       // 应用的 OnRespCancel  事件, 应答已取消(TRCKOnAppResp)
         kaaOnRespConfirm  = 36,       // 应用的 OnRespConfirm 事件, 应答已确认(TRCKOnAppResp)

         // 扩展属性基数
         kaaBaseFuncObj    = 0x10000,  // 应用的函数索引基数: 函数对象
         kaaBaseFuncName   = 0x20000,  // 应用的函数索引基数: 函数名
         kaaBaseConnObj    = 0x40000}; // 应用的连接索引基数: 连接对象

// 应用的状态
enum TRCKAppState
        {kasInactive       = 0,        // 函数未定义
         kasDefining       = 1,        // 函数正在定义
         kasDefined        = 2,        // 函数已定义
         kasClosing        = 3,        // 正在关闭
         kasOpening        = 4,        // 正在打开
         kasOpened         = 5};       // 已打开

// 函数的属性项
enum TRCKFuncAttrib
        {kfaData           = 0,        // 自定义数据
         kfaName           = 1,        // 函数名
         kfaActive         = 2,        // 函数是否已激活
         kfaAppObj      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值