首页>>厂商>>CT中间件厂商>>朗深技术

UniMedia IDE集成环境访问网络服务器实例解析

2009/05/27

1.目标功能

  在IDE中实现Socket客户端,向TCP/IP服务端发送数据串。

2.数据格式说明

  如果外部应用采用NETX控件与IDE进行通信,则以MSG对象格式进行数据传递,不需要进行格式拆分。

MSG对象格式示例:
MSG userMsg
userMsg.UserMsgType = 8
userMsg.Int0 = 0
userMsg.Int1 = 1
userMsg.Int2 = 2
userMsg.Int3 = 3
userMsg.Int4 = 4
userMsg.Int5 = 5
userMsg.Int6 = 6
userMsg.Int7 = 7
userMsg.Int8 = 8
userMsg.Int9 = 9
userMsg.Str0 = “a”
userMsg.Str1 = “b”
userMsg.Str2 = “c”
userMsg.Str3 = “d”
userMsg.Str4 = “e”
userMsg.Str5 = “f”
userMsg.Str6 = “g”
userMsg.Str7 = “h”
userMsg.Str8 = “i”
userMsg.Str9 = “j”

  如果与外部之间通过SOCKET直接进行码流通信,以上面的对象值为例,具体消息格式举例说明如下,码流格式为ASCII码:
式举例说明如下,码流格式为ASCII码:
<CTMSG>
<CLASS>4</CLASS><TYPE>199</TYPE>
<MID>1</MID><CMD>-1</CMD><PID>0</PID>
<UserMsgType>8</UserMsgType>
<IntItems>0;1;2;3;4;5;6;7;8;9</IntItems>
<StringListSize>10</StringListSize>
<Str0>a</Str0>
<Str1>b</Str1>
<Str2>c</Str2>
<Str3>d</Str3>
<Str4>e</Str4>
<Str5>f</Str5>
<Str6>g</Str6>
<Str7>h</Str7>
<Str8>i</Str8>
<Str9>j</Str9>
</CTMSG>。

其中:
MID是消息ID(正整数)

4199
1-10等字段字用户填上述固定值即可;
StringListSize 字段的值为10个有效字符数, 其它字段可根据业务需要填写;
说明:10个Str字符的总长不能大于1024个字节,单个字段的长度不能大于1024个字节,整个消息包不能大于2048个字节。

NETX使用
如果不想自己拆分数据,可直接使用NetX控件。

4.2.4.3 IDE脚本实例
///////////////////////////////////////////////////////////////
#define TCP_SERVER_IP "127.0.0.1"
#define TCP_SERVER_PORT 14445
SCPMANAGER g_SCPManager

//主函数
sub main(LIST& cpl)
{
CONN l_CONNVar
MSG l_MSGSendVar
String l_stringIpOfClientVar
Int l_intPortClientVar,l_intConnIDClientVar,l_intRetVar
Bool l_boolConnectStatusVar

//初始化IP和PORT
l_stringIpOfClientVar = TCP_SERVER_IP
l_intPortClientVar = TCP_SERVER_PORT

//发起TCP Client端连接
l_CONNVar.OpenConn(PT_TCP, CT_CLIENT, l_stringIpOfClientVar,
l_intPortClientVar, l_intConnIDClientVar,
false, l_intRetVar)
//等待2秒,等待底层网络连接
Wait(2000)
//设置网络对象具备自动重连特性
l_CONNVar.SetAutoReconnect(true, l_intRetVar)
//注册数据到达事件
EventMap(INF_SYS_CONNDATAINCOME, OnConnDataIncome, 0)

while(true)
{
//取网络连接状态
l_CONNVar.GetStatus(l_boolConnectStatusVar, l_intRetVar)
//分析是否已经建立网络连接,建立则发送数据
if (l_boolConnectStatusVar == true)
{
//初始化发送数据
l_MSGSendVar.UserMsgType = 8
l_MSGSendVar.Int0 = 10
l_MSGSendVar.Str0 = "aaa"
Log(DBG,"发送数据..." )

//发送数据
l_CONNVar.SendMsg(l_MSGSendVar, l_intRetVar)
//TODO 发送数据后结束,为验证数据接收,可以考虑不结束
break
}
//如果连接没有成功,则过一会再进行查询
Wait(5000)
}// end of while

//断开网络连接,关闭对象
l_CONNVar.CloseConn()
}

//接收网络数据事件回调函数
sub OnConnDataIncome(int tag, CONN& conn)
{
int l_intRetVar
bool l_boolHasMsgVar, l_boolConnectStatusVar
MSG l_MSGReadVar

Log(DBG,"有网络数据到达事件!")
//可能有多条消息,进行循环读取接收
while(true)
{
//开始读消息...
conn.ReadMsg(l_MSGReadVar, l_boolHasMsgVar, l_intRetVar)
if((l_intRetVar == RET_SUCC) && (l_boolHasMsgVar == true))
{
Log(DBG,"(TCP CLIENT READ ,(RET=",l_intRetVar,
",CONNID=", conn.ConnID,
",Type=", l_MSGReadVar.UserMsgType,
",Int0=", l_MSGReadVar.Int0,
",Str0=", l_MSGReadVar.Str0,")")
}
else
{
//没有数据或错误
return
}
} //end of While read
}

NEX控件说明:

  NETX 是以ActiveX控件以接口方式被外部应用程序调用。对高层应用程序而言,直接利用控件,可以在不了解UniMedia内部协议的前提下,实现与IDE的网络通信,具体通信内容是上述定义的MSG对象。详细接口说明可以参考《接口及使用手册-NETX.PDF》

CTI论坛报道



相关链接:
UniMedia MSIX座席控件Javascript调用实例 2009-09-23
UniMedia 中间件典型应用-外线座席呼叫中心 2009-09-23
基于UniMedia融合媒体中间件的企业通信平台 2009-07-27
PBX常用功能 2009-06-10
UniMedia监控中心使用技巧 2009-06-09