PowerSys程序员手册
远程对象调用访问接口
上海拓启信息技术有限公司
PowerSYS程序员手册—远程对象调用接口
1
2
3
目 录
编程概述................................................................................................................2 1.1 基本定义..................................................................................................2
1.1.1 关联类...............................................................................................2 1.1.2 相关函数...........................................................................................2 1.1.3 基本宏定义.......................................................................................6 1.1.4 消息响应函数的格式定义...............................................................6 1.2 属性说明..................................................................................................6 1.3 相关头文件和库......................................................................................6 编程接口................................................................................................................6 2.1 服务器端编程..........................................................................................6 2.2 客户端编程..............................................................................................6 例子........................................................................................................................7 3.1 服务器端例程..........................................................................................7 3.2 客户端例程..............................................................................................9
3.2.1 调用方法1........................................................................................9 3.2.2 调用方法2........................................................................................9
上海拓启信息技术有限公司
1
PowerSYS程序员手册—远程对象调用接口
1 编程概述
分布式对象调用(DOC)是整个平台系统的核心,它基于线程池、连接管理器、网络服务。提供了一套服务器对象开发支持和客户端远程对象调用支持。
1.1 基本定义
1.1.1 关联类
CNetCmd : 服务器网络服务处理类,网络服务器每接收到一个远程客户请求,就产生一个CNetCmd对象进行服务,其作用空间为线程内部,支持并发。任何一个服务对象都必须从CNetCmd类派生。
CNetListener: 服务器服务监听类,启动就可以监听某一服务端口,并且对客户端的请求做出响应。
服务器的响应一般是要创建一个相关联的专门服务对象,并将此线程对象置入线程池中进行实时调度。
CRpcNetClient: 对象调用客户端类。可以通过此对象进行服务器对象的分布式调用。
1.1.2 相关函数 int NetFuncCallArg(
char *hostname, int modetype, int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL,
上海拓启信息技术有限公司
2
PowerSYS程序员手册—远程对象调用接口
void **ret2=NULL, int *retlen2=NULL);
int MainNodeFuncCallArg(
int modetype, int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL, int *retlen2=NULL);
int MainSrvFuncCallArg(
char *srvname, int modetype, int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL, int *retlen2=NULL);
int AllHostFuncCallArg(
int modetype,
上海拓启信息技术有限公司
3
PowerSYS程序员手册—远程对象调用接口
int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL,
int *retlen2=NULL);
int AllSrvFuncCallArg(
char *srvname, int modetype, int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL, int *retlen2=NULL);
int OtherSrvFuncCallArg(
char *srvname,
int modetype, int funcno,
int *retcode=NULL, void *arg0=NULL, int
len0=0,
上海拓启信息技术有限公司
4
PowerSYS程序员手册—远程对象调用接口
void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL, int *retlen2=NULL);
int OtherHostFuncCallArg(
int modetype, int funcno, int *retcode=NULL, void *arg0=NULL, int len0=0, void *arg1=NULL, int len1=0,
void *arg2=NULL, int len2=0,
void *arg3=NULL, int len3=0,
void **ret0=NULL, int *retlen0=NULL, void **ret1=NULL, int *retlen1=NULL, void **ret2=NULL, int *retlen2=NULL);
void SetSrvTimeOut(
int timeout = 5, int conntime = 3);
void SetMaskProxFlag(int flag)
void SetPrefNetNo(int netno)
int GetMaskProxFlag()
int GetLastObjectError();
//获取当前网络对象服务的错误号
上海拓启信息技术有限公司
5
PowerSYS程序员手册—远程对象调用接口
virtual int GetObjectProxHost(int objtype,int fno,char *proxno=NULL);
void DetachAllRxBuf(); 1.1.3 基本宏定义
1.1.4 消息响应函数的格式定义
1.2 属性说明 1.3 相关头文件和库
头文件:
#include “psmsl.h” 动态库文件: win32 : psmsl.lib
unix: libpsmsl.so
2 编程接口
2.1 服务器端编程
服务器端的编程主要是涉及到服务器对象的实现和服务的初始化。 一般要包含三部分的内容:服务器实现、服务器对象产生函数、服务器初始化。
2.2 客户端编程
客户端编程主要依靠CRpcNetClient类和系列RPC_???函数来实现。
上海拓启信息技术有限公司
6
PowerSYS程序员手册—远程对象调用接口
3 例子
3.1 服务器端例程
//服务器对象
#include “pscsl.h” #include “psdre.h”
class CNetXXXSrv : public CNetCmd ,public CMemMan {
public:
CNetXXXSrv(int sock,struct sockaddr_in trg); virtual int NetFuncCall(int func,void *arg0,int len0,void *arg1,int len1,void *arg2,int len2,void *arg3,int len3,void **ret0,int *retlen0,void **ret1,int *retlen1,void **ret2,int *retlen2); virtual void DeleteObject(){delete this;} private: int NetFunc1(int aa,int bb);
protected: };
CNetXXXSrv::CNeXXXSrv(int sock,struct sockaddr_in trg): CNetCmd(sock,trg) { }
//服务器处理响应,根据功能号进行相应处理
int CNetXXXSrv::NetFuncCall(int func,void *arg0,int len0,void *arg1,int len1,void *arg2,int len2,void *arg3,int len3,void **ret0,int *retlen0,void **ret1,int *retlen1,void **ret2,int *retlen2) { *ret0 = *ret1 = *ret2 = NULL; *retlen0 = *retlen1 = *retlen2 = NULL; int16 funcno = func;
if(funcno >= FCTRL_TYPE_RTUTIME) int xx = 1;
switch(funcno) {
上海拓启信息技术有限公司
7
PowerSYS程序员手册—远程对象调用接口
case FUNC_NO0: //功能0 { //要根据客户请求接口来解释相应参数 int32s *flag = (int32s*)arg0; SrvRecallComData((int)(*flag)); }
break; case FUNC_NO1:功能1 {
YKBUF tmpyk; if(arg0 == NULL || arg1 == NULL || arg2 == NULL) return FALSE; tmpyk.rtuno = (int16)*(int16s*)arg0; tmpyk.ykno = (int16)*(int16s*)arg1; tmpyk.ykval = (uint8)(int16)*(int16s*)arg2; tmpyk.srcno = SCADA_DATA; tmpyk.retstatus = 0; tmpyk.flag = FCTRL_OPSTATUS_WAITING; tmpyk.wtcount = 0; CFertYk yk; tmpyk.cmdtype = FCTRL_TYPE_YKSELECT; yk.AddOneYkRecord(&tmpyk); }
break;
case ….:
default: break; }
return TRUE; }
//网络服务对象创建函数
CNetCmd * CoCreateXXXSrvClass(int classType,int handle,struct sockaddr_in trg) { return (new CNetXXXSrv(handle,trg)); }
//初始化XXX网络服务对象 void init_XXX_netsrvobj() {
上海拓启信息技术有限公司
8
PowerSYS程序员手册—远程对象调用接口
//创建
CNetListener * srv_XXXsrv = new CNetListener(NETOBJ_TYPE_XXXSRV,NETOBJ_TYPE_XXXSRV); // NETOBJ_TYPE_XXXSRV 为系统唯一的服务器ID
//关联构造器
srv_XXXsrv->SetObjCreateFunc(CoCreateXXXSrvClass);
//启动监听
srv_XXXsrv->ExecThread(1,THREAD_EXEC_PERMANENCE,10); }
3.2 客户端例程
3.2.1 调用方法1
CRpcNetClient rpc;
rpc.NetFuncCallArg(“hostname0”, NETOBJ_TYPE_XXXSRV, 0,…); 调用hostname0节点上的0号方法
rpc. MainNodeFuncCallArg (NETOBJ_TYPE_XXXSRV, 0,…); 调用系统主控机的对象方法
rpc. MainSrvFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 调用SCADA主服务器的对象方法
rpc. AllHostFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 调用所有节点的对象方法
rpc. AllSrvFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 调用SCADA主服务器的对象方法
rpc. OtherSrvFuncCallArg(“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 如果本机为相应服务器,则调用SCADA其它服务器的对象方法; 否则调用所有服务器的对象。
rpc. OtherHostFuncCallArg(NETOBJ_TYPE_XXXSRV, 0,…); 调用除本节点外的所有节点的方法 3.2.2 调用方法2
UTL_NetFuncCallArg(“hostname0”, NETOBJ_TYPE_XXXSRV, 0,…); 调用hostname0节点上的0号方法
UTL_MainNodeFuncCallArg (NETOBJ_TYPE_XXXSRV, 0,…); 调用系统主控机的对象方法
UTL_MainSrvFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 调用SCADA主服务器的对象方法
UTL_AllHostFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…);
上海拓启信息技术有限公司
9
PowerSYS程序员手册—远程对象调用接口
调用所有节点的对象方法
UTL_AllSrvFuncCallArg (“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 调用SCADA主服务器的对象方法
UTL_OtherSrvFuncCallArg(“SCADA”,NETOBJ_TYPE_XXXSRV, 0,…); 如果本机为相应服务器,则调用SCADA其它服务器的对象方法; 否则调用所有服务器的对象。
UTL_ OtherHostFuncCallArg(NETOBJ_TYPE_XXXSRV, 0,…); 调用除本节点外的所有节点的方法
上海拓启信息技术有限公司
10
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务