예제 #1
0
 /** 登陆XMPP服务器 */
 public boolean login() throws RemoteException {
   // 未建立XMPP连接
   if (!connection.isConnected()) {
     return false;
   }
   // 应经登陆过
   if (connection.isAuthenticated()) {
     return true;
   } else {
     // 开始登陆
     try {
       connection.login(account, password, imService.getString(R.string.app_name));
       if (messageListener == null) {
         messageListener = new MessageListener();
       }
       // 添加消息监听器
       connection.addPacketListener(messageListener, new PacketTypeFilter(Message.class));
       Roster roster = connection.getRoster();
       if (rosterListener == null) {
         rosterListener = new IMClientRosterListener();
       }
       // 添加花名册监听器
       roster.addRosterListener(rosterListener);
       // 获取花名册
       if (roster != null && roster.getEntries().size() > 0) {
         Uri uri = null;
         for (RosterEntry entry : roster.getEntries()) {
           // 获取联系人名片信息
           VCard vCard = new VCard();
           vCard.load(connection, entry.getUser());
           // 用户名称
           String userName = StringUtils.parseName(entry.getUser());
           // 用户备注
           String remarks = entry.getName();
           // 通讯录的名称
           String name = "";
           // 名称与备注判断
           if (userName.equals(remarks) && vCard != null) {
             // 使用联系人的昵称
             name = vCard.getNickName();
           } else {
             // 使用备注
             name = remarks;
           }
           if (vCard != null) {
             IM.saveAvatar(vCard.getAvatar(), StringUtils.parseName(entry.getUser()));
           }
           ContentValues values = new ContentValues();
           values.put(ContactsProvider.ContactColumns.ACCOUNT, entry.getUser());
           values.put(ContactsProvider.ContactColumns.NAME, name);
           String sortStr = PinYin.getPinYin(name);
           values.put(ContactsProvider.ContactColumns.SORT, sortStr);
           values.put(
               ContactsProvider.ContactColumns.SECTION,
               sortStr.substring(0, 1).toUpperCase(Locale.ENGLISH));
           // 储存联系人
           if (imService
                   .getContentResolver()
                   .update(
                       ContactsProvider.CONTACT_URI,
                       values,
                       ContactsProvider.ContactColumns.ACCOUNT + " = ?",
                       new String[] {entry.getUser()})
               == 0) {
             uri = imService.getContentResolver().insert(ContactsProvider.CONTACT_URI, values);
           }
         }
         // 发生改变,通知刷新
         if (uri != null) {
           imService.getContentResolver().notifyChange(uri, null);
         }
       }
     } catch (XMPPException e) {
       e.printStackTrace();
     } catch (SmackException e) {
       e.printStackTrace();
     } catch (IOException e) {
       e.printStackTrace();
     }
     return true;
   }
 }
예제 #2
0
  public static void main(String[] args) {
    Scanner inputReader = new Scanner(System.in);
    XMPPConnection connection = null;
    System.out.println("Welcome to the Multi User Chat Desktop Application.");
    boolean notConnected = true;
    while (notConnected) {
      System.out.println("Enter the XMPP server you would like to connect to (e.g. myserver.org):");
      String xmppServer = inputReader.nextLine();
      try {
        System.out.println("Processing... Please wait");
        connection = new XMPPConnection(xmppServer); // connects to server address provided
        connection.connect();
        System.out.println("Connection Successful!\n");
        notConnected = false;
      } catch (Exception e) {
        System.out.println(
            "There was an issue connecting to the XMPP server '"
                + xmppServer
                + "' (We recommend jabber.org)");
      }
    }
    boolean validUserAndPass = false;
    String userName = null;
    while (!validUserAndPass) {
      System.out.println("Please enter your username: "******"Please enter your password: "******"Validating your information...");
        connection.login(userName, password); // attempts to login to the server
        validUserAndPass = true;
        System.out.println("Login Successful!\n");
      } catch (Exception e) {
        System.out.println(
            "Error logging into server - Your username or password may be incorrect");
      }
    }
    Connection connection2 = new XMPPConnection("jabber.org");
    MultiUserChat groupChat2 = null;
    try {
      connection2.connect();
      connection2.login("*****@*****.**", "opencommdesign");
    } catch (XMPPException e1) {
      System.out.println("Hardcoded opencommdesign failed to log in");
    }
    System.out.println("Enter a command to begin (or 'help' to see available commands)");
    MultiUserChat groupChat = null;
    ArrayList<RosterEntry> onlineUsersInRoom =
        new ArrayList<RosterEntry>(); // updated when a user accepts the chat invitation
    boolean chatRoomGenerated =
        false; // checked against to make sure room is not regenerated each time a user is invited
    ChatManager chatmanager = null;
    Chat chat = null;
    boolean programTerminated = false;
    while (!programTerminated) {
      String input = inputReader.nextLine();
      input =
          input
              .trim(); // ignores spaces before and after the command if the command itself is
                       // correct - does not remove spaces mixed into the command
      if (input.startsWith(HELP_VERB) && input.length() == HELP_VERB.length()) {
        System.out.println(COMMAND_OPTIONS); // prints list of available commands
      } else if (input.equals(VIEW_ROOM_VERB)) {
        if (groupChat == null) {
          System.out.println("You are not currently in any chat rooms");
        } else {
          System.out.println("You are currently in the '" + DEFAULT_ROOM_NAME + "' chatroom");
        }
      } else if (input.startsWith(INVITATION_VERB)) {
        String userToInvite =
            input.substring(
                INVITATION_VERB.length()
                    + 1); // +1 accounts for space after verb, isolates the username

        try {
          if (!chatRoomGenerated) {
            System.out.println("Initializing a default chat room...");
            groupChat = new MultiUserChat(connection, DEFAULT_ROOM_NAME + "@conference.jabber.org");
            groupChat.create(
                DEFAULT_ROOM_NAME); // initializes a default instant room, automatically placing the
                                    // user in it
            groupChat.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
            System.out.println("Default chat room initialized!");
            // listen for invitation rejections
            groupChat.addInvitationRejectionListener(
                new InvitationRejectionListener() {
                  public void invitationDeclined(String invitee, String reason) {
                    System.out.println("User '" + invitee + "' declined your chat invitation.");
                    System.out.println("Reason: " + reason);
                  }
                });
            groupChat2 =
                new MultiUserChat(connection, DEFAULT_ROOM_NAME + "@conference.jabber.org");
            groupChat2.join(DEFAULT_ROOM_NAME); // hardcoded second user joins the room
            chatRoomGenerated = true;
            chatmanager = connection.getChatManager();
            chat =
                chatmanager.createChat(
                    userToInvite,
                    new MessageListener() {
                      public void processMessage(Chat chat, Message message) {
                        System.out.println("Received message: " + message);
                      }
                    });
          }
          groupChat.invite(
              userToInvite, "User '" + userName + "' has invited you to join a chat room");

        } catch (XMPPException e) {
          System.out.println("Error occured in creating the chat room");
        }
      } else if (input.equals(VIEW_BUDDY_VERB)) { // if user enters viewBuddyList
        Roster roster = connection.getRoster(); // gets other users on this connection
        Collection<RosterEntry> entries = roster.getEntries();
        ArrayList<RosterEntry> onlineUsers = new ArrayList<RosterEntry>();
        ArrayList<RosterEntry> offlineUsers = new ArrayList<RosterEntry>();
        for (RosterEntry entry : entries) {
          if (entry
              .toString()
              .contains(
                  "[Buddies]")) { // if other users are marked as buddies, print them to the list
            String user = entry.getUser();
            if (roster.getPresence(user) == null) { // if user is offline, add them to offlineUsers
              offlineUsers.add(entry);
            } else {
              onlineUsers.add(entry);
            }
          }
        }

        System.out.println("Online Buddies in your chat room:");
        if (groupChat.getOccupantsCount() == 1) {
          System.out.println("There are 0 buddies in your chat room");
        } else {
          @SuppressWarnings("unchecked")
          Collection<String> users = (Collection<String>) groupChat.getOccupants();
          for (@SuppressWarnings("unused") String user : users) {
            System.out.println(user);
          }
        }
        System.out.println("Online Buddies:");
        if (onlineUsers.size() == 0) {
          System.out.println("There are 0 buddies online");
        } else {
          for (RosterEntry entry : onlineUsers) {
            String user = entry.toString().substring(0, entry.toString().indexOf("[Buddies]"));
            System.out.println(user);
          }
        }
        System.out.println("Offline Buddies:");
        if (offlineUsers.size() == 0) {
          System.out.println("There are 0 buddies offline");
        } else {
          for (RosterEntry entry : offlineUsers) {
            String user = entry.toString().substring(0, entry.toString().indexOf("[Buddies]"));
            System.out.println(user);
          }
        }
        System.out.println("");
      } else {
        System.out.println(
            "Command not recognized.  Type 'help' to see a list of available commands");
      }

      if (!programTerminated) {
        System.out.println("Enter a command: ");
      }
    }
  }