别名推送

来源:互联网 发布:用友u8数据库不符合 编辑:程序博客网 时间:2024/05/01 06:37

添加别名推送功能的思路:
在服务器端保存一个集合,保存用户名与别名的对应关系.
然后客户端在用户登陆之后,发送用户名与别名到服务器,
服务器保存到集合中,当服务器需要使用别名推送的时候,
提供好方法,就可以推送了.

客户端
在 ServiceManager 中 提供方法发送:

    public void setAlias(final String alias){        new Thread(new Runnable() {            public void run() {                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO 自动生成的 catch 块                    e.printStackTrace();                }                NotificationService service=NotificationService.getInstance();                XmppManager manager=service.getXmppManager();                if(manager!=null){                    if(!manager.isAuthenticated()){                        synchronized (manager) {                           try {                            manager.wait();                        } catch (InterruptedException e) {                            // TODO 自动生成的 catch 块                            e.printStackTrace();                        }                           }                    }                    SetAliasIQ iq=new SetAliasIQ();                    String username=sharedPrefs.getString(Constants.XMPP_USERNAME,"");                    iq.setUsername(username);                    iq.setAlias(alias);                    iq.setType(Type.SET);                    manager.getConnection().sendPacket(iq);                }                           }        }).start();    }

在服务器端,定义 IQHandler 来处理消息并注册:

public class IQAliasHandler extends IQHandler {    private static final String NAMESPACE = "androidpn:iq:alias";    @Override    public String getNamespace() {        return NAMESPACE;    }    @Override    public IQ handleIQ(IQ packet) throws UnauthorizedException {        IQ reply = null;        ClientSession session = sessionManager.getSession(packet.getFrom());        if (session == null) {            log.error("Session not found for key " + packet.getFrom());            reply = IQ.createResultIQ(packet);            reply.setChildElement(packet.getChildElement().createCopy());            reply.setError(PacketError.Condition.internal_server_error);            return reply;        }        if(session.getStatus() == Session.STATUS_AUTHENTICATED){            if(IQ.Type.set.equals(packet.getType())){                Element query = packet.getChildElement();                String username = query.elementText("username");                String alias=query.elementText("alias");                if(username!=null && !username.equals("")                          && alias !=null && !alias.equals("")){                    ///保存数据                    sessionManager.setAlias(username, alias);                }        }        }        return null;    }}
0 0