Пример #1
0
  public void login(JSONObject json, String sessionID) {

    String username = (String) json.get("nickname"), // "elijah",
        password = "******",
        resource = "viewt",
        serviceName = "openfire-test",
        //				host = "192.168.1.117";
        host = "127.0.0.1";
    XMPPTCPConnectionConfiguration config =
        XMPPTCPConnectionConfiguration.builder()
            //				  .setUsernameAndPassword(username, password)
            .setServiceName(serviceName)
            .setHost(host)
            .setPort(5222)
            //				  .setDebuggerEnabled(true)
            .setSecurityMode(SecurityMode.disabled)
            //				  .allowEmptyOrNullUsernames()
            .build();
    AbstractXMPPConnection conn = new XMPPTCPConnection(config);
    MultiUserChatManager mucMgr = null;
    InvitationListener invitationListener = null;
    try {
      conn.connect();
      //			conn.login();
      conn.login(username, password, resource);
      conn_map.put(session.getId(), conn);
      sess_map.put(session.getId(), session);
      user_map.put(username, sessionID);
      mucMgr = MultiUserChatManager.getInstanceFor(conn);
      // 邀请监听 A->B
      invitationListener =
          new InvitationListener() {
            @Override
            public void invitationReceived(
                XMPPConnection conn,
                MultiUserChat room,
                String inviter,
                String reason,
                String password,
                Message message) {
              // inviter--conn
              // A---------->B
              //					java.util.logging.Logger.getLogger("").
              // 邀请原因 存放 对方的sessionID
              JSONObject jsonObject1 = new JSONObject(reason);
              String mucname = (String) jsonObject1.getString("mucname"); // 邀请原因

              JSONObject jsonObject =
                  new JSONObject(jsonObject1.get("reason").toString().replace("'", "\""));
              String sessionID = (String) jsonObject.get("sessionID"); // 被邀请人的sessionID
              String nickname = (String) jsonObject.get("nickname"); // 邀请人昵称
              String reason1 = (String) jsonObject.get("reason"); // 邀请原因

              try {
                // = "var rs = {type:'${0}',nickname:'${1}',mucname:'${2}',msg:'${3}'}"
                String rs1 =
                    rs.replace("${type}", "invited")
                        .replace("${nickname}", nickname)
                        .replace("${reason}", reason1)
                        .replace("${mucname}", mucname);
                // 发送消息通知对方
                sess_map.get(sessionID).getBasicRemote().sendText(rs1);
              } catch (IOException e) {
                e.printStackTrace();
              }
              //					(conn2, room, inviter, "I'm busy right now");
              //					try {
              //						room.join(conn.getUser());
              //					} catch (NoResponseException e) {
              //						e.printStackTrace();
              //					} catch (XMPPErrorException e) {
              //						e.printStackTrace();
              //					} catch (NotConnectedException e) {
              //						e.printStackTrace();
              //					}
            }
          };
      mucMgr.addInvitationListener(invitationListener);
      System.out.println("-------" + conn.getStreamId() + "--" + session.getId());
      // 这里发送broadcast消息 通知所有在线的人员
      broadcast(json, sessionID);

    } catch (Exception e) {
      e.printStackTrace();
      conn = null;
      conn_map.remove(session.getId());
      sess_map.remove(session.getId());
      if (mucMgr != null) mucMgr.removeInvitationListener(invitationListener);
    }
  }