您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页PowerSys程序员手册-远程对象调用接口

PowerSys程序员手册-远程对象调用接口

来源:五一七教育网


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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务