Smack 으로 jabber 클 라 이언 트 작성

11319 단어
모든 일 은 제로 부터 시작 할 수 없습니다. XMPP 규범 은 웹 서버 규범 과 같 습 니 다. 우 리 는 마지막 으로 라 이브 러 리 를 선택 하여 개발 을 가속 화 합 니 다. 그래서 우 리 는 Smack 을 사용 합 니 다. 사용 하기 쉽 고 디자인 이 합 리 적 이기 때문에 그들의 전형 적 인 jive 를 기억 하 십 니까? 그것 도 그들 이 개발 한 것 입 니 다. 비교적 좋 을 것 입 니 다. apache 의 licence 에 주의 하 십시오.비 즈 니스 프로그램 에 적용 할 수 있 습 니 다. 다운로드 주소:http://www.jivesoftware.org/사용 이 간단 합 니 다. xmpp 프로 토 콜 에 정통 할 필요 가 없습니다.
XMPPConnection connection = 
new XMPPConnection(
"jabber.org");
connection.login(
"mtucker", 
"password");
connection.createChat(
"[email protected]").sendMessage(
"Howdy!");
tcp 프로 토 콜 이기 때문에 먼저 네트워크 연결 을 만들어 야 합 니 다:
XMPConnection 은 xmpp 서버 와 의 연결 을 만 드 는 데 사용 되 는 클래스 로 ssl 이 필요 하 다 면 SSL XMPConnection 을 사용 합 니 다.
/     .
XMPPConnection conn1 = new XMPPConnection("jabber.org");

//      XMPPConnection conn2 = new XMPPConnection("jabber.org", 5222);

//   ssl  .
XMPPConnection connection = new SSLXMPPConnection("jabber.org"); 

연결 을 만 들 려 면 사용자 이름과 비밀 번 호 를 사용 하여 로그 인 해 야 합 니 다. XMPConnection. login (String username, String password) 방법 을 사용 할 수 있 습 니 다. 로그 인 이 완료 되면 새로운 Chat 또는 Group Chat 대상 을 만들어 다른 사람과 이 야 기 를 나 눌 수 있 습 니 다.
운영 명부
명 부 는 다른 온라인 사용 자 를 추적 할 수 있 습 니 다. 사용 자 는 그룹 으로 구성 할 수 있 습 니 다. 예 를 들 어 친구, 동료, 그리고 누가 온라인 이 고 누가 온라인 이 아 닌 지 발견 할 수 있 습 니 다.
      XMPPConnection.getRoster()          ,  roster .roster          ,         ,      .
     
          xmpp       xml     .org.jivesoftware.smack.packet        xmpp   :message,presence,IQ.Chat  GroupChat                    ,            .               ,         "    "  。
/ presence.Type.UNAVILABLE        presence      . Presence presence = new Presence(Presence.Type.UNAVAILABLE);
presence.setStatus("Gone fishing");
//     . con.sendPacket(presence);
Smack            : PacketListener,  PacketCollector. 
     PacketFilter            .  PacketListener         ,packet collector           .  ,packet listener           ,packet collector        .Packet collectors and listeners  XMPPConnection        .

쓰다 Chat 와 Group Chat 에서 메 시 지 를 전달 합 니 다.
수신 메 시 지 를 보 내 는 것 은 통신 소프트웨어 의 핵심 기능 이 라 하 더 라 도 이 임 무 를 완성 하 는 데 두 가지 도움 이 된다.
  • org.jivesoftware.smack.Chat -- 둘 사이 에 정 보 를 전달 하 는 데 쓰 인 다.
  • org.jivesoftware.smack.GroupChat -- 한 그룹 에 가입 하여 많은 사람들 에 게 소식 을 전달 하 는 데 쓰 인 다.
  • 그들 은 모두 org. jivesoftware. smack. packet. Message 를 사용한다. 클래스 는 메시지 전달 을 실현 합 니 다. 어떤 환경 에서 Chat, Group Chat 등 두 가지 고급 클래스 를 돌아 서 수 동 으로 메 시 지 를 전달 하거나 listener 에 가입 할 수 있 습 니 다.
     
    Chat
    Chat 대상 은 두 사용자 사이 에 thread ID 를 사용 하여 새로운 메시지 스 레 드 를 만 듭 니 다. 다음 코드 는 user 를 사용 하여 새로운 Chat 를 만 든 다음 텍스트 메 시 지 를 보 내 는 방법 을 보 여 줍 니 다.
    //           XMPPConnection        "connection".
    Chat newChat = connection.createChat("[email protected]");
    newChat.sendMessage("Howdy!");
    
    
       Chat.sendMessage(String)               Message        ,   String     body,      message.           ,   :
    //           XMPPConnection        "connection".
    Chat newChat = connection.createChat("[email protected]");
    Message newMessage = newChat.createMessage();
    newMessage.setBody("Howdy!");
    message.setProperty("favoriteColor", "red");
    newChat.sendMessage(newMessage);
    

    Chat 대상 은 다른 chat 의 대답 을 듣 는 것 을 허용 합 니 다. 아래 코드 는 앵무새 처럼 말 합 니 다. 그것 은 누구의 말 에 도 똑 같은 대답 을 할 것 입 니 다.
    //           XMPPConnection        "connection".
    Chat newChat = connection.createChat("[email protected]");
    newMessage.setBody("Hi, I'm an annoying parrot-bot! Type something back to me.");
    while (true) {
        //            .
        Message message = newChat.nextMessage();
        //                     .
        newChat.sendMessage(message.getBody());
    }
    

    위의 코드 는 Chat. nextMessage () 방법 을 사용 하여 다음 message 를 얻 었 습 니 다. 차단 식 입 니 다. 물론 listener 를 추가 하여 메 시 지 를 얻 을 수 있 습 니 다.
    GroupChat
    그룹 chat 가 사용자 들 과 동시에 채 팅 을 실행 합 니 다. 채 팅 그룹 에 가입 하려 면 닉네임 을 사용 해 야 합 니 다. 다음 코드 는 채 팅 그룹 에 가입 하고 메 시 지 를 보 내 는 방법 을 보 여 줍 니 다.
    //           XMPPConnection        "connection".
    GroupChat newGroupChat = connection.createGroupChat("[email protected]");
    //      "jsmith"     .
    newGroupChat.join("jsmith");
    //         .
    newGroupChat.sendMessage("Howdy!");
    

    메 시 지 를 보 내 는 것 과 받 는 것 은 Chat 와 비슷 해서 자세히 설명 하지 않 겠 습 니 다.
    채 팅 리스트 와 온라인 상태
    명단 은 다른 사용자 의 상 태 를 추적 하고 사용 자 를 친구, 동료 등 으로 나 눌 수 있 습 니 다. XMPConnection. getRoster () 방법 으로 Roster 대상 을 얻 을 수 있 지만 로그 인 에 성공 한 후에 야 합 니 다.
    로 스 터 실체
    모든 사용 자 는 로 스 터 실체 로 묘사 되 어 있 습 니 다. 가방 은 다음 과 같 습 니 다.
  • XMPP 주소 (예:[email protected]).

  • 별명 (e.g. "Joe").
  • 은 친구, 동료 등 어느 리스트 에 속 합 니까?

  • 다음 코드 는 모든 Roster 실체의 정 보 를 출력 합 니 다.
    Roster roster = con.getRoster();
    for (Iterator i=roster.getEntries(); i.hasNext(); ) {
        System.out.println(i.next());
    }
    

    우리 도 특정한 실 체 를 얻 는 방법 이나 그룹 을 만 드 는 방법 을 제공 했다.
    온라인 상태
     
    모든 사용자 목록 의 대상 은 온라인 상태 입 니 다. Roster. getPresence (String user) 는 Presence 대상 에 게 사용자 의 온라인 상 태 를 설명 합 니 다. 한 사용자 의 presence 는 온라인 이거 나 오프라인 입 니 다. 사용자 가 온라인 에 있 을 때 그들의 presence 는 현재 그들 이 무엇 을 하고 있 는 지 등 추가 정 보 를 포함 할 수 있 습 니 다.그들 은 기꺼이 방해 하지 않 을 것 인가? 친구 명단 과 Presence 의 변 화 를 감청 하 는 것 은 일반적으로 하나의 tree 로 친 구 를 나타 내 는 것 이다.
    presence 정 보 는 수시로 변 합 니 다. 물론 명단 의 증가 와 삭제 도 가능 합 니 다. 명단 과 presence 의 변 화 를 감청 하려 면 반드시 RosterListener 를 사용 해 야 합 니 다. 아래 코드 는 어떻게 감청 하고 모든 presence 를 인쇄 하 는 지 보 여 줍 니 다. 보통 클 라 이언 트 소프트웨어 는 사용자 명단 UI 를 업데이트 하 는 코드 를 표시 하여 변 화 를 반영 합 니 다.
    final Roster roster = con.getRoster();
    roster.addRosterListener(new RosterListener() {
        public void rosterModified() {
            // Ignore event for this example.
        }
    
        public void presenceChanged(String user) {
            // If the presence is unavailable then "null" will be printed, // which is fine for this example.
            System.out.println("Presence changed: " + roster.getPresence(user));
        }
    });
    

    사용자 목록 에 추가
    사용자 목록 에서 사용 할 수 있 는 허용 모델, 즉 상대방 이 허용 해 야 사용자 명단 에 가입 할 수 있 습 니 다. 이것 은 사용자 의 프라이버시 를 보호 합 니 다. 따라서 사용자 에 가입 하면 상대방 이 요청 을 받 아들 일 때 까지 미결 상태 로 들 어 갑 니 다. 또한 사용자 가 있 으 면 가입 해 주 십시오.이 요청 에 대해 받 아들 이거 나 반대 하 는 대답 을 해 야 합 니 다. Smack 는 세 가지 전략 을 제공 합 니 다.
  • 모든 요청 을 자동 으로 수락 합 니 다.
  • 은 모든 요 구 를 자동 으로 반대 합 니 다.
  • 을 사용자 에 게 수 동 으로 처리 합 니 다.
  • 로 스 터. setSubscriptionMode (int subscriptionMode) 를 통 해 어떤 정책 을 사용 할 지 설정 할 수 있 습 니 다. 간단 한 클 라 이언 트 는 자동 동의 모드 를 사용 할 수 있 지만, 기능 이 비교적 건전 한 클 라 이언 트 는 사용자 가 수 동 으로 나 올 수 있 도록 제공 해 야 합 니 다. 수 동 모드 에서 PacketListener 등록 을 통 해 유형 Presence. Type. SUBSCRIBE 가 함 유 된 Presence 패 키 지 를 들 어야 합 니 다.
    Smack 은 받 아들 인 패 킷 을 처리 하기 위해 유연 한 프레임 워 크 를 제공 합 니 다.
  • org.jivesoftware.smack.PacketCollector -- 새로운 가방 을 동시에 기다 리 게 해 드릴 게 요.
  • org.jivesoftware.smack.PacketListener -- 비동기 로 가방 이 왔 음 을 알려 드 립 니 다.
  • 하나의 packet listener 는 이벤트 스타일 의 프로그램 에서 사용 할 수 있 습 니 다. packet collector 는 순환 과 차단 작업 을 할 수 있 습 니 다. 모두 사용 할 수 있 습 니 다.
    XMPPConnection 인 스 턴 스 를 만 듭 니 다.
    org.jivesoftware.smack.filter.PacketFilter 인 터 페 이 스 는 그 가방 들 을 PacketCollector 에 나 누 어 줄 것 이 라 고 정의 했다. 아니면 Packet Listener. org.jivesoftware.smack.filter 가방 에서 미리 정 의 된 filers 를 찾 았 습 니 다.
    //       filter         .    AndFilter     filters.
    PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), 
            new FromContainsFilter("[email protected]"));
    //            "connection" XMPPConnection   .
    
    //        filter  PacketCollector  .
    PacketCollector myCollector = connection.createPacketCollector(filter);
    
    //   ,        packet listener.              .
    PacketListener myListener = new PacketListener() {
            public void processPacket(Packet packet) {
                //           .
            }
        };
    //   .
    connection.addPacketListener(myListener, filter);
    

    표준 패 킷 필터
    우 리 는 일련의 filter 를 제공 하 였 으 니, 너 는 실현 할 수 있다. 
    PacketFilter 인터페이스 로 사용자 정의 구현.
  • PacketTypeFilter -- filters for packets that are a particular Class type.
  • PacketIDFilter -- filters for packets with a particular packet ID.
  • ThreadFilter -- filters for message packets with a particular thread ID.
  • ToContainsFilter -- filters for packets that are sent to a particular address.
  • FromContainsFilter -- filters for packets that are sent to a particular address.
  • PacketExtensionFilter -- filters for packets that have a particular packet extension.
  • AndFilter -- implements the logical AND operation over two filters.
  • OrFilter -- implements the logical OR operation over two filters.
  • NotFilter -- implements the logical NOT operation on a filter.

  • Smack 으로 jabber 클 라 이언 트 를 작성 하 는 기본 지식 은 충분 합 니 다. 더 많은 내용 은 공식 자료 와 mail list 를 찾 아 도움 을 요청 하 십시오.

    좋은 웹페이지 즐겨찾기