androidpn服务端
package
org.androidpn.server.xmpp主要是封装了xmpp的底层协议,包括协议的封装和包的解析。auth是验证的。
codec是包的解码。handler是包的处理,presence是用户状态,push是推送的,session是用户的session。
connect
主要是xmpp和服务器的连接
重要的有一个方法是deliver(分发),这个主要就是去通过连接,把你的信息发送给客户端。
包括自身的一些方法:关闭等
-------------------------------------------------------------------------------------------
session
主要是去客户端和服务端的一次会话的抽象类
主要就是有一个connect的内部对象,来进行一个数据的分发。
----------------------------------------------------------------------------------------------
clientsession
是一个session的子类,这个类主要就是在创建的时候去,利用xmpp协议建立一个客户端的连接
----------------------------------------------------------------------------------------------
1.sessionManager
单例的,
sessionManager主要就是管理用户的session
createClientSession,创建一个session,并且加入到session管理列表clientSessions中去。
-------------------------------------------------------------------------------------------
2.xmppserver
单例的
是作为一个服务端开启了,在spring的配置里面。
Runtime.getRuntime().addShutdownHook(new
ShutdownHookThread());
这是一个钩子函数,当ivm要关闭的时候,会先执行ShutdownHookThread(),然后再去关闭jvm。
这个方法其实就是去关闭每一个session管理的长连接connect,然后在去关闭jvm。
start会开启你的服务,初始化了spring的容器。
---------------------------------------------------------------------------------------------
3ConfigManager
单例的,
是commons的组件,这样你可以使用他加载config.xml中配置信息。主要是和config来联合使用的。
--------------------------------------------------------------------------------------------------
Usercontroller
user.do的控制器
这是一个spring配置的试图管理器,这个主要是利用userServiceImpl来调用userdao,利用hibernate访问数据库
获取user的信息。
数据表中的字段:id,created_date,email,name,password,updateed_date,username。
并且利用presenceManager的方法,利用sessionmanager可不可以获得该用户的session来判断他的在线的状态。
--------------------------------------------------------------------------------------------------
SessionController
session.do的控制器
就是利用sessionManager来监控你的session。
--------------------------------------------------------------------------------------------------
NotifactionController
notifaction.do的控制器
利用NotifactionManager来进行消息的发送。
--------------------------------------------------------------------------------------------------
NotifactionManager
主要有3个方法:
sendBroadcast,这个是给全体的用户发送消息推送,
sendNotifcationToUser
,给某个特定的用户发送notifaction
createNotificationIQ,创建一个iq类型的交互的xml变量。
这里里面的发送notifaction主要还是利用session的deliver的方法去发送一个数据。
--------------------------------------------------------------------------------------------------
在你的spring配置的时候,设置了监听的端口5222.
<bean
id="ioAcceptor"
class="org.apache.mina.transport.socket.nio.NioSocketAcceptor"
init-method="bind"
destroy-method="unbind">
<property name="defaultLocalAddress"
value=":5222" />
<property name="handler" ref="xmppHandler"
/>
<property name="filterChainBuilder" ref="filterChainBuilder"
/>
<property name="reuseAddress" value="true"
/>
</bean>、
-------------------------------------------------------------------------------------------------
关于定时发送的,主要是继承了一个ServletContextListener,这是全局的一个监听器,你可以在全局来定期发送东西
你可以定义一个:public class MessageSender implements
ServletContextListener的类。
public void sender(){
timer = new
Timer();
timer.schedule(new TimerTask() {
@Override
public void
run() {
if(flag){
NotificationManager notificationManager = new
NotificationManager();
String apiKey = Config.getString("apiKey",
"");
notificationManager.sendBroadcast(apiKey, "这是title"+count,
"这是信息体message"+count,
"");
System.out.println("这是我的定时器的log:--->"+count);
count++;
}else{
timer.cancel();
timer=null;
}
}
},
1000,
5000);
}
可以看到的是做一个定时器里面就可以使用NotificationManager的sendBroadcast来发送消息了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。