吵吵   2019-03-30  阅读:2,168

Cache数据库强大的地方在于其第三方的objectScript,在LIS与众多设备通讯中,有了这个就相当的方便。

Cache建立基于Socket的TCP连接,收到数据后,直接用ObjectScript进行解析,然后保存到数据库,可以说是没有中间商赚差价。

前面我们也聊到了Cache的TCP通讯要怎么做,主要是基于Open函数,它带参执行后就能建立Socket连接。

但是现在Cache已经进化到类的模式了,我们在参考文档中已经可以看到它全部的类,以及其的继承关系。其中就可以看到%IO.Socket,继承自%IO.DeviceStream, %IO.IParts.SocketIO, %IO.SocketCommon三个类,等于就拥有了这三个类的属性和方法。

还有一个类是%IO.ServerSocket 它应该就是Server模式,而%IO.Socket是Client模式。

最主要的方法method Open(pHost As %String = “”, pPort As %String = “”, ByRef pTimeout As %Numeric = -1, Output pSC As %Status) as %Boolean

也很简单了,就是IP地址,端口号,超时时间以及%Status用于返回一些信息。

因此以后我们的接口就可以通过类的构造来实现了,比如我建立了一个ASTMSocket类,然后以后其它仪器LIS接口就可以通过继承ASTMSocket来实现了。

继承的时候重载Parse()函数,用于解析数据,重载Create()函数,用来构造发送的数据。

剩余的通讯工作,比如回复ACK啊,校验啊等等,都交给父类ASTMSocket去完成了。

Class lab.ASTMSocket Extends %RegisteredObject
{

Property IP As %String;

Property Port As %String;

Property CharEncode As %String;

Property Socket As %IO.Socket;

Property ServerSocket As %IO.ServerSocket;

Property MachineCode As %String;

Property ReceiveContent As %String;

Property ReceiveBuffer As %String;

Property IsReceiving As %Boolean;

Property IsContent As %Boolean;

Property ReceiveStream As %GlobalCharacterStream;

Property SendList As %ListOfDataTypes;

Property SendListPosition As %Integer;

//用于解析收到的数据 其它类继承重载该函数即可

Method Parse(pString As %String = "")
{
}

//用于解析收到的数据>32000 其它类继承重载该函数即可

Method ParseStream(pStream As %GlobalCharacterStream)
{
}

Method Open(pHost As %String = "", pPort As %String = "", pCharEncode As %String = "ASCII") As %Boolean
{
s ..ReceiveStream=##class(%GlobalCharacterStream).%New()
s ..SendList=##class(%ListOfDataTypes).%New()
s ..IP=pHost
S ..Port=pPort
s ..CharEncode=pCharEncode
i pHost=""
{

s ..ServerSocket=##class(%IO.ServerSocket).%New()
s status=..ServerSocket.CharEncodingSet(..CharEncode)
if ($$$ISOK(status))
{
q ..ServerSocket.Open(..Port,3)
}
}
else
{
s ..Socket=##class(%IO.Socket).%New()
s status=..Socket.CharEncodingSet(..CharEncode)
if ($$$ISOK(status))
{
q ..Socket.Open(..IP,..Port,3)
}
}
Q 0
}

以后一个LIS接口文件只要两个函数搞定,重复的代码就少了很多,感觉前所未有的清爽!

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注