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:[email protected]">
* <i><[email protected]></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:[email protected]">
* <i><[email protected]></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:[email protected]">
* <i><[email protected]></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短信网关平台(值得一看)(源码).rar
共487个文件
html:215个
class:175个
java:73个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 118 浏览量
2023-02-03
13:40:59
上传
评论
收藏 686KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
小程序 JAVA短信网关平台(值得一看)(源码).rar (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
CmppPacket.class 2KB
CmppQuery.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
资源评论
大富大贵7
- 粉丝: 317
- 资源: 8869
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功