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来发送消息了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。