版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、e-Bridge 电信业务平台实验指导书 开发类实验十三基于NGN平台开发开户、销户、停机、复机实验13.1 知识准备1 对SoftX3000的了解和使用;对SoftX3000硬件设备要有一个简单的认识了解,更主要的是对SoftX3000的业务知识及操作要有一个熟练的掌握,因为在做基于SoftX3000平台设备的电信开发实验过程当中涉及了对SoftX3000业务知识的认识。2 对中间件TLQ的配置使用;对中间件TLQ的了解与使用是为了方便在电信业务开发实验的过程中减少功能模块间的相互通信,则选择成熟的第三方工具来降低模块间的因通信产生的异常概率,3 熟练应用JAVA中的Socket通信。当我们
2、在基于SoftX3000平台设备上做电信业务开发的时候,需要对SoftX3000设备进行命令操作,所以我们需要与设备进行通信交互,以方便操作设备,所以在此我们要对与设备交互的Socket通信要会熟练的应用。以上知识点,可参阅SoftX3000软交换使用手册及TongLink安装配置文档.docJava知识基础实验目的13.2 训练目的 1、通过本实验,让学生了解基于电信业务平台开发流程;2、让学生了解SoftX3000(软交换)开户(销户,停机,复机)命令及简单操作;3、熟悉SDK包使用。实验内容13.3 1313.3.1 硬件与软件准备1、搭建好MyEclipse开发环境的pc机器一台和搭建
3、好Linux测试环境的pc机器一台 (可以使用虚拟机操作系统环境);2、电信业务开发平台彩铃平台中已有的AIP_SMP模块;AIP_SMP 模块:AIP_SMP模块为彩铃平台的配置管理模块,此模块中可以配置基本的用户信息,并可以给电话号码配置彩铃铃音信息。3、 第三方工具jar包(在工程中已添加)。13.3.2 数据准备1、 增加工作站增加工作站的作用是为与SoftX3000(软交换)建立通信的服务器开户权限,以便服务器与SoftX3000(软交换)设备连接进行通信的时候方便有权限对SoftX3000(软交换)设备进行操作,如图13-1、图13-2所示: 图13-1 增加工作站IP地址 图13
4、-2 增加工作站权限通过SoftX3000(软交换)维护终端登陆到SoftX3000(软交换)服务器上去,然后如上图操作给搭建有测试环境的pc电脑的IP地址添加权限;2、通过在带SoftX3000(软交换)维护软件的PC,连接到SoftX3000(软交换)交换机上去,在交换机上按下面流程增加数据:增加呼叫源增加计费情况修改计费制式增加计费情况索引增加本局呼叫字冠增加号段;3、准备好SoftX3000软交换机连接的服务IP地址,及向SoftX3000(软交换)设备发送的开户(销户,停机,复机)指令;4、准备好彩铃平台中aip_smp模块aip_uic模块间交互的通信协议;5、在测试环境pc中建立
5、好aip_scp数据库并初始化(请按照数据库文件执行操作)。13.4实验设备及实验网络拓扑图13-3(彩铃平台模块间关系结构图) 在此实验过程中,我们需要开发的模块功能为与页面平台交互,然后实现对SoftX3000软交换机交互,达到对电话号码在SoftX3000软交换机上的开户(销户,停机,复机)操作,我们在图中将此模块描绘为AIP_UIC模块。实验步骤13.5图13-4 彩铃平台aip_uic模块消息流程图 如图13-4所示,aip_uic模块在整体平台架构中所体系的功能,主要是实现了与aip_smp模块进行消息交互(主要是aip_smp模块给aip_uic模块发送开户(销户,停机,复机)信
6、息),然后aip_uic模块再与设备进行交互,以达到实现电话号码在SoftX3000交换机上的开户(销户,停机,复机)功能。注:在实现aip_uic模块与SoftX3000交换机的交互连接时,我们可以通过socket来交互,可以为长连接或者短连接,在实验过程中aip_uic模块与SoftX3000交换机连接用的是短连接。短连接的好处在于需要的时候才进行相互连接交互,不需要时则关闭,释放资源,以免造成资源紧张。那么,我们打开开发工具,导入aip_uic工程,这工程是不完整的工程,需要编写实现开户、销户、停机以及复机等操作,我们要在此工程中要实现与aip_smp模块的交互,并且还要能够与SoftX
7、3000 (软交换机)设备进行通信交互,以便达到我们能够在aip_smp模块页面上实现对SoftX3000 (软交换机)设备的操作,在SoftX3000 (软交换机)设备上进行电话号码的开户、销户、停机以及复机功能(aip_uic主要功能为获取aip_smp的相关于对SoftX3000 (软交换机)操作的信息,然后将其进行组装成SoftX3000 (软交换机)识别的命令,从而达到能够在SoftX3000 (软交换机)上对电话号码进行开户、销户、停机以及复机的效果。 下面我们来实现aip_uic模块的功能:package com.xunfang.aip.uic.agent;import msof
8、t.epay.util.LoadConfig;import msoft.epay.util.logging.Log;import msoft.epay.util.tp.ThreadPool;import msoft.epay.util.tp.ThreadProvider;import com.xunfang.aip.uic.config.XMLParse;import com.xunfang.aip.uic.handle.EsbHandle;import com.xunfang.aip.uic.handle.Handler;import com.xunfang.aip.uic.tool.Con
9、stant;public class UicMain public static void main(String args) /导入工具类LoadConfig.getConfig();System.out.println(aip_uic开始启动,版本号_V );L(aip_uic开始启动,版本号_V );/读取配置文件信息XMLParse t = new XMLParse();t.initXML();/初始返回码信息Constant.initSmpRecode();Constant.initBusinessMap();/初始化线程池ThreadPoo
10、l pool = ThreadProvider.getInstance().getThreadPool();/启动接收ESB消息处理线程Handler esb = new EsbHandle();esb.setThreadPool(pool);esb.start();/* * 初始化日志记录器 */Runtime.getRuntime().addShutdownHook(new Thread()public void run()L(系统正在退出.););可以看出类为主函数类,且在主类中主要启动了一个线程类EsbHandle.java,这个类是我们用来获取中间件TLQ队列中aip_
11、smp模块传递过来的消息的,如下为类EsbHandle.java中关键方法,用来接收中间件队列消息使用的。省略/* * 启动业务处理 */public void deal() /调用中间件服务EsbService esb = ServiceFactory.getEsbService();trywhile(true)/循环接收信息Message message = esb.recive();/取消息if(message = null)/获取获取的消息为空,则暂停10msThread.sleep(10);continue;String tradeNo = message.getTradeNo().
12、trim();/获取处理码String seqno = message.getSeqNo();/获取流水号L(获取ESB信息: + message.toString();/String className = xml.getSonAttr(BUSINESS, TRADENO, tradeNo, class);String className = (String)Constant.dealBusiness.get(tradeNo);Class dealclass = Class.forName(className);/获取处理类Business bus = (Business)de
13、alclass.newInstance();bus.setMessage(message);BusinessProcess procbus = new BusinessProcess(bus);threadPool.run(procbus);catch(Exception e)Log.error(接收ESB消息错误, e);省略从上面的消息处理方法中,我们可以看出TLQ消息队列获取到aip_smp模块发送的消息,获得消息后,解析出消息处理码并判断出业务类型,然后再调用相应的业务线程类来处理相应的业务类型。在SoftX3000平台上开发开户,销户,停机,复机此四类操作基本是一致的,区别在于命令的
14、不同以及销户、停机、复机三种操作都是基于开户操作之后进行,就是必须先要对电话号码进行开户,即放号后,才可以对电话号码进行销户、停机、复机等操作。所以我们此次实验过程当中,我们只实现了开户操作,而其它三类操作大家可以在实验之外进行完成。下面我们要实现的是电话号码的开户,实现一个开户类,以达到能够在SoftX3000软交换机上进行开户操作。package com.xunfang.aip.uic.business.ngn;import java.util.HashMap;import msoft.epay.esb.Message;import msoft.epay.util.logging.Log;
15、import com.xunfang.aip.uic.business.Business;import com.xunfang.aip.uic.socket.ClientSocket;import com.xunfang.aip.uic.tool.Constant;public class AddBussiness implements Business/* * XML消息 */private Message message ;/* * socket客户端 */private ClientSocket client=null;/* * NGNService对象 */private NGNSer
16、vice ngnService=null;/* * 业务流程 */public void deal() try ngnService=new NGNService(message);client = new ClientSocket(message);boolean isConnect = client.connect();/连接设备if(!isConnect)/连接失败 ngnService.sendErrResponse(019, NGNService.NGN_RE_LOGIN_FAILED);return; HashMap login = ngnService.loginNgn(clie
17、nt);String flag = (String)login.get(flag);if(flag.equals(1)/登陆失败ngnService.sendErrResponse(019, (String)login.get(ErrMsg);return;byte recv = null;String recode = null;/开户消息1byte sendMsg0 = ngnService.getAddMsg0();/开户消息2byte sendMsg1 = ngnService.getAddMsg1();int sendLen0 = client.send(sendMsg0);recv
18、 = client.receive(Constant.RETCODE_FLAG);recode = NGNService.getNgnRecode(recv);if(sendLen00 | recode=null | ( !recode.equals(7406) & !recode.equals(0) )/联机设定未完成ngnService.sendNoContentMess( 020, 1);L(开户返回码: + recode);return;Thread.sleep(500);int sendLen1 = client.send(sendMsg1);recv = client
19、.receive(Constant.RETCODE_FLAG);recode = NGNService.getNgnRecode(recv);if(sendLen10 | recode=null | !recode.equals(0)ngnService.sendNoContentMess(020, 1);return;ngnService.sendNoContentMess(000, 1);catch(Exception e)Log.error(NGN开户,解析包错误, e);ngnService.sendNoContentMess(001, 1);finallyclient.socketC
20、lose();/* * 设置处理消息 */public void setMessage(Object msg) message = (Message)msg;在AddBussiness.java类中,我们实现了通过与aip_smp之间的协议解析与之相关的交互信息,也实现了与设备的通信连接和交互。我们在调用与SoftX3000(软交换机)设备交互前,还需要先实现与SoftX3000(软交换机)设备的连接通信:package com.xunfang.aip.uic.socket;import java.io.DataInputStream;import java.io.DataOutputStre
21、am;import java.io.IOException;import .Socket;import .SocketException;import .UnknownHostException;import java.util.Map;import msoft.epay.esb.Message;import msoft.epay.util.logging.Log;public class ClientSocket /* * socket连接 */private Socket sockChannel=null;/* * timeOut超时时间 */private int timeOut= 20
22、 * 1000;/* * 是否连接 */private boolean isConnected;/* * 数据输入流 */ private DataInputStream input; /* * 数据输出流 */ private DataOutputStream output; /* * 主机地址 */ private String remote = ; /* * 端口号 */ private int port = 17700;/* * 默认构造函数 */public ClientSocket()private byte message = new byte6134;/* * 构造函数 * p
23、aram ip ip地址 * param port 端口号 */public ClientSocket(String ip, int port)this.remote = ip;this.port = port;/* * 构造函数 * param context */public ClientSocket(Message message)/ 获取消息内容Map context = message.getContext();this.remote = (String)context.get(LoginAddr);this.port = Integer.parseInt(String)contex
24、t.get(LoginPort); /* * 连接主机 * return */public boolean connect()boolean connected = false;try sockChannel = new Socket(remote, port);sockChannel.setReuseAddress(true);sockChannel.setSoTimeout(timeOut);if(sockChannel.isConnected()this.isConnected = true;/数据输入流 input = new DataInputStream(sockChannel.g
25、etInputStream(); /数据输出流 output = new DataOutputStream(sockChannel.getOutputStream(); connected = true;elseif(sockChannel!=null)sockChannel.close();sockChannel=null;this.isConnected = false;L(创建连接失败:+remote+:+port); catch (UnknownHostException e) Log.error(连接主机失败:+remote+:+port, e); catch (IOE
26、xception e) Log.error(连接主机失败、创建输入输出流错误: +remote+:+port, e);return connected;/* * 设置socket超时时间,单位(秒) * param time */public void setTimeOut(int time)if(sockChannel=null) return;try sockChannel.setSoTimeout(time*1000); catch (SocketException e) Log.error(GSMTelecom设置超时失败!, e);/* * 关闭输入、输出流、socket连接 */p
27、ublic void socketClose()try /L(关闭socket连接); if(input!=null) input.close(); if(output!=null) output.close(); if(sockChannel!=null) sockChannel.close(); catch(Exception ex) Log.error(关闭socket连接失败, ex); /* * 发送数据信息 */ public int send(byte send) try if(send=null) return -1; output.write(send); ou
28、tput.flush(); L(发送消息:+new String(send); catch(Exception e) Log.error(发送数据错误!, e); return -1; return send.length; /* * 接收数据信息 */public byte receive(String retCode)/最后返回数组byte destMsg = null;/接收次数int recvTime=0;/每次实际接受的数据长度int rn=0;try while(recvTime0)String temp=new String(message,0,rn);if(.eq
29、uals(retCode)|temp.indexOf(retCode)!=-1)break; recvTime+; Thread.sleep(500);if (rn 0) destMsg = new bytern;System.arraycopy(message, 0, destMsg, 0, rn);L(接收消息 + rn + : + new String(destMsg); catch (IOException e) Log.error(SOCKET接收数据异常!, e); catch (InterruptedException e) Log.error(SOCKET接收数据异常!, e);return destMsg;/* * 返回是否连接标识 * return */public boolean isConnected()return this.isConnected;ClientSocket.java实现了与设备的连接方法,向设备发送消息,并接收设备返回信息的方法。所以在AddBussiness.java类中,建立了一个与SoftX3000(软交换机)设备交互的连接,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 废弃油脂加工可持续航空燃料项目申请报告
- 雨污水改造工程节能评估报告
- 社区绿化养护管理实施方案
- 2025内蒙古润蒙能源有限公司招聘22人备考考试试题及答案解析
- 基于社区共建的城市养老服务体系构建与运营模式研究教学研究课题报告
- 水库项目技术方案
- 2025广西柳州市柳江区禁毒委员会办公室招聘编外工作人员1人备考笔试题库及答案解析
- 高中生借助GIS技术重建法国探索印度洋航海数据课题报告教学研究课题报告
- 2025广西岭南国防教育基地运营岗位招聘8人备考考试题库及答案解析
- 高级销售经理面试常见问题集
- 中国南方航空校招笔试题及答案
- 茶叶入门基础知识
- 2025年国家开放大学(电大)《政治学原理》期末考试复习题库及答案解析
- GB 46518-2025液态食品散装运输技术规范
- 《中华人民共和国水法》解读培训
- 2025年山东省纪委遴选笔试试题及答案
- 大型央国企“十五五”企业战略规划编制实战指南:7大工具+案例破解企业战略迷局
- 幼儿园中班语言故事《世界上最柔软的房子》课件
- 建筑材料大一讲解
- 长期照护师课件
- SMT物料基础培训
评论
0/150
提交评论