package com.ll.smsbeans;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Logger;
import com.ll.smsbeans.cmpp3.CmppActiveTestBuilder;
import com.ll.smsbeans.cmpp3.CmppActiveTestRespBuilder;
import com.ll.smsbeans.cmpp3.CmppConnectBuilder;
import com.ll.smsbeans.cmpp3.CmppConnectResp;
import com.ll.smsbeans.cmpp3.CmppPacket;
import com.ll.smsbeans.cmpp3.CmppPacketCommon;
import com.ll.smsbeans.cmpp3.CmppTerminateBuilder;
import com.ll.smsbeans.cmpp3.CmppTerminateRespBuilder;
import com.ll.smsbeans.log.LogCommon;
/**
* ConnectionBean 是smsbeans中主要的bean.
* <p>
* ConnectionBean 主要是和服务器建立认证连接,所有其它的bean都是通过它和服务器通信的。
* <p>
* ConnectionBean提供一些“标准”的于服务器通信的接口,例如send方法,同时在内部自动处理一些服务
* 器端的消息的回服例如ActiveTest等,并且,在运行过程中处理数据包的发送失败,保持链路联结。
* <p>
* 所有其它的beans通过ConnectionBean发送数据,和通过监听由ConnectionBean发布的received消息接收过滤数据
* <p>
* @see MessengerBean
* @see IQBean
* @see RosterBean
*
*
* @author listlike <a href="mailto:listlike@hotmail.com">
* <i><listlike@hotmail.com></i></a>
* @version $Revision: 1.0 $
*/
public class ConnectionBean implements Serializable, PacketListenerRegistrar
{
/**
*
* Timer为定时器类
* 为ConnectBean提供定时服务,通过定时调用 主要用于回复包的时间记数,以及保持链路测试包的定时发送。
* 有两个定时器:
* 1 秒定时器
* 用于回复包的时间记数,每秒激活一次ConnectionBean.onTimer.
* 2 保持链路测试包定时器
* 用于保持链路测试包的记时,根据常数ACTIVETIME的值激活ConnectBeantion.onActiveConnect。
*
* @see com.ll.smsbeans.ConnectionBean#onTimer()
* @see ConnectionBean#onActiveConnect()
* @see ConnectionBean#ACTIVETIME
*<p>
* @author listlike <a href="mailto:listlike@hotmail.com">
* <i><listlike@hotmail.com></i></a>
*
*/
public class Timer extends Thread
{
// 保持链路测试包的记时
private long activeSec = 0;
//定时器是否有效
private boolean enableTimer = true;
//保持链路测试的定时器是否有效
private boolean enableActiveTimer = true;
private boolean timerRun = true;
/**
* 保持链路测试的定时器复位
*/
public void resetActiveTime()
{
activeSec = System.currentTimeMillis();
}
/**
* @see java.lang.Runnable#run()
*/
public void run()
{
while (timerRun)
{
try
{
sleep(1000);
if (enableTimer)
ConnectionBean.this.onTimer();
if (System.currentTimeMillis() - activeSec
>= ACTIVETIME * 1000)
{
resetActiveTime();
if (enableActiveTimer)
ConnectionBean.this.onActiveConnect();
}
} catch (InterruptedException e)
{
return;
} catch (Exception e)
{
return;
}
}
}
/**
* 定时器状态
* @return 定时器状态
*/
public boolean isEnableActiveTimer()
{
return enableActiveTimer;
}
/**
* 保持链路测试的定时器状态
* @return 保持链路测试的定时器状态
*/
public boolean isEnableTimer()
{
return enableTimer;
}
/**
* 设置保持链路测试的定时器状态
* @param enable 设置保持链路测试的定时器状态
*/
public void setEnableActiveTimer(boolean enable)
{
enableActiveTimer = enable;
}
/**
* 设置定时器状态
* @param enable 设置定时器状态
*/
public void setEnableTimer(boolean enable)
{
enableTimer = enable;
}
/* (非 Javadoc)
* @see java.lang.Thread#interrupt()
*/
public void interrupt()
{
timerRun = false;
super.interrupt();
}
/* (非 Javadoc)
* @see java.lang.Thread#start()
*/
public synchronized void start()
{
reset();
super.start();
}
private void reset()
{
enableTimer = true;
enableActiveTimer = true;
timerRun = true;
resetActiveTime();
}
}
/**
*PacketStreamMonitor 通过响应数据报发送和接收事件,维护ConnectionBean的连接。
*
*
* @author listlike <a href="mailto:listlike@hotmail.com">
* <i><listlike@hotmail.com></i></a>
*
*/
public class PacketStreamMonitor implements PacketListener
{
/**
* 主要工作:
* 1、 将接收到的回复包从发送队列移出。
* 2、 判断是否登陆成功。
* 3、 自动处理中断包和中断回复包。
* 4、 处理链路测试包。
* @see com.ll.smsbeans.PacketListener#receivedPacket(com.ll.smsbeans.PacketEvent)
*/
public void receivedPacket(PacketEvent pe)
{
_log.info(pe.getPacket().toString());
if (((CmppPacket) pe.getPacket()).isResponse())
{
SendPacketState sps = sendPacketList.get(pe.getPacket());
if (sps != null)
{
sps.setState(SendPacketState.STATE_RESPONSED);
sps.setRespPacket(pe.getPacket());
}
//sendPacketList.remove( pe.getPacket());
}
if (status.getValue() == ConnectionEvent.EState.CONNECTING)
{
Packet p = pe.getPacket();
if (p != null)
{
if (p instanceof CmppPacket)
{
CmppPacket cp = (CmppPacket) p;
if (cp.getCommandId()
== CmppPacketCommon.ID_CMPP_CONNECT_RESP)
// 0x80000001
{
sendPacketList.remove(cp);
CmppConnectResp ccr = (CmppConnectResp) cp;
if (ccr.getStatus() == 0)
{
setConnectionState(
ConnectionEvent.STATE_CONNECTED,
ConnectionEvent.REASON_CLIENT_INITIATED);
mTimer = new Timer();
mTimer.start();
} else
{
disconnected(
ConnectionEvent.REASON_SERVER_INITIATED);
}
}
}
}
return;
}
if (status.getValue() == ConnectionEvent.EState.CONNECTED)
{
Packet p = pe.getPacket();
if (p != null)
{
if (p instanceof CmppPacket)
{
CmppPacket cp = (CmppPacket) p;
switch (cp.getCommandId())
{
case CmppPacketCommon.ID_CMPP_TERMINATE_RESP :
//0x80000002
sendPacketList.remove(pe.getPacket());
disconnected(
ConnectionEvent.REASON_CLIENT_INITIATED);
break;
case CmppPacketCommon.ID_CMPP_TERMINATE :
//0x00000002
CmppTerminateRespBuilder ctrb =
new CmppTerminateRespBuilder();
ctrb.setSequenceId(cp.getSequenceId());
send(ctrb.builder());
break;
case CmppPacketCommon.ID_CMPP_ACTIVE_TEST :
//0x00000008
CmppActiveTestRespBuilder catrb =
new CmppActiveTestRespBuilder();
catrb.setSequenceId(cp.getSequenceId());
send(catrb.builder());
mTimer.resetActiveTime();
break;
case CmppPacketCommon.ID_CMPP_ACTIVE_TEST_RESP :
//0x80000008
sendPacketList.remove(cp);
break;
default :
break;
}
}
}
}
_log.log(
LogCommon.DEBUG_LEVEL,
"sendPacketList=" + sendPacketList.size());
}
/**
* 主要工作:处理服务器端发送来的中断包。
*
* @see com.ll.smsbeans.PacketListener#sentPacket(com.ll.smsbeans.PacketEvent)
*/
public void sentPacket(PacketEvent pe)
{
_log.info(pe.getPacket().toString());
if (status.getValue() == ConnectionEvent.EState.CONNECTED)
{
Packet p = pe.getPacket();
if (p != null)
{
if (p instanceof CmppPacket)
{
CmppPacket cp = (CmppPacket) p;
if (cp.getCommandId()
== CmppPacketCommon.ID_CMPP_TERMINATE_RESP)
//0x80000002
disconnected(
ConnectionEvent.REASON_SERVER_INITIATED);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
JAVA-sms.rar_java sms gateway_java短信平台_sms java_短信_网关 (487个子文件)
log.cfg 2KB
log.cfg 2KB
ConnectionBean.class 12KB
ConnectionBean.class 12KB
ConnectBeanTest.class 8KB
ConnectBeanTest.class 8KB
CmppSubmit.class 6KB
CmppSubmitBuilder.class 6KB
CmppSubmitBuilder.class 6KB
CmppSubmit.class 6KB
SyncMessageBean.class 5KB
SyncMessageBean.class 5KB
MessageBeanTest.class 5KB
ConnectionBean$PacketStreamMonitor.class 5KB
MessageBeanTest.class 5KB
ConnectionBean$PacketStreamMonitor.class 4KB
MessageBeanTest$MessageBeanThread.class 4KB
MessageBeanTest$MessageBeanThread.class 4KB
OutputStreamHandler.class 4KB
CmppDeliver.class 4KB
OutputStreamHandler.class 4KB
CmppDeliver.class 3KB
LogCommon.class 3KB
CmppQueryResp.class 3KB
LogCommon.class 3KB
CmppPacketCommon.class 3KB
CmppPacketCommon.class 3KB
CmppDeliverBuilder.class 3KB
CmppDeliverBuilder.class 3KB
MD5.class 3KB
CmppQueryRespBuilder.class 3KB
CmppQueryRespBuilder.class 3KB
InputStreamHandler.class 3KB
InputStreamHandler.class 3KB
CmppQueryResp.class 3KB
MD5.class 3KB
CmppConnect.class 3KB
MessageBean.class 3KB
OutputStreamHandler$LockingQueue.class 3KB
MessageBean.class 3KB
CmppConnect.class 3KB
OutputStreamHandler$LockingQueue.class 2KB
SendPacketState.class 2KB
ConnectionAdapter.class 2KB
SendPacketState.class 2KB
PacketRebroadcaster.class 2KB
ConnectionAdapter.class 2KB
CmppPacket.class 2KB
CmppQuery.class 2KB
CmppPacket.class 2KB
DeliverBean.class 2KB
DeliverBean.class 2KB
PacketRebroadcaster.class 2KB
CmppQuery.class 2KB
cmppConnectTest.class 2KB
cmppConnectTest.class 2KB
CmppPacketParser.class 2KB
CmppPacketParser.class 2KB
MessageBeanTest$DeliverPacketListener.class 2KB
ConnectionBean$Timer.class 2KB
MessageBeanTest$MyConnectionAdapter.class 2KB
MessageBeanTest$DeliverPacketListener.class 2KB
ConnectionBean$Timer.class 2KB
MessageBeanTest$MyConnectionAdapter.class 2KB
SendPackStateList.class 2KB
CmppConnectResp.class 2KB
SendPackStateList.class 2KB
CmppDeliverResp.class 2KB
CmppSubmitResp.class 2KB
ConnectionEvent.class 2KB
CmppHander.class 2KB
ConnectionEvent.class 2KB
CmppConnectResp.class 2KB
CmppCancelResp.class 2KB
MessageBean$MessageListener.class 2KB
CmppDeliverResp.class 2KB
CmppSubmitResp.class 2KB
CmppConnectBuilder.class 2KB
CmppConnectBuilder.class 2KB
CmppQueryBuilder.class 2KB
CmppQueryBuilder.class 2KB
CmppCancel.class 2KB
DeliverBean$DeliverListener.class 2KB
MessageBean$MessageListener.class 2KB
CmppHander.class 2KB
DeliverBean$DeliverListener.class 2KB
CmppActiveTestResp.class 1KB
CmppCancelResp.class 1KB
ConsoleLogFormatter.class 1KB
ConsoleLogFormatter.class 1KB
CmppCancel.class 1KB
CmppConnectRespBuilder.class 1KB
CmppConnectRespBuilder.class 1KB
CmppDeliverHander.class 1KB
CmppDeliverHander.class 1KB
CmppActiveTestResp.class 1KB
CmppActiveTest.class 1KB
CmppTerminate.class 1KB
CmppTerminateResp.class 1KB
CmppQueryRespHander.class 1KB
共 487 条
- 1
- 2
- 3
- 4
- 5
局外狗
- 粉丝: 64
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- yolov8实战第八天-pyqt5-yolov8实现车牌识别系统(论文(8700+字+数据集+完整部署代码+代码使用说明)
- 三相桥式全桥整流电路MATALB Simulink仿真文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0