2017-03-21 1 views
1

자바를 사용하여 스맥 4.1에서 XEP 198 (스트림 관리)를 사용하는 방법, 몇 가지 참조를 공유하십시오.Java에서 Smack을 통해 스트림 관리를 구현하는 방법은 무엇입니까?

내가 어떻게 여기 스트림 관리를 구현하는 헤로인과 스파크에서 다른에서 두 개의 클라이언트 하나들과 대화를 나눌 수 있어요이를 통해

private static String username = "test"; 
     private static String password = "test123"; 

     public static class MessageParrot implements PacketListener { 
      private XMPPConnection xmppConnection; 

      public MessageParrot(XMPPConnection conn) { 
       xmppConnection = conn; 
      } 

      public void processPacket(Packet packet) { 
       Message message = (Message)packet; 
       if(message.getBody() != null) { 
        String fromName = StringUtils.parseBareAddress(message.getFrom()); 
        System.out.println("Message from " + fromName + "\n" + message.getBody() + "\n"); 
        Message reply = new Message(); 
        reply.setTo(fromName); 
        reply.setBody("I am a Java bot. You said: " + message.getBody()); 
        xmppConnection.sendPacket(reply); 
       } 
      } 
     } 


     public static void main(String[] args) { 




      System.out.println("Starting IM client"); 

      // gtalk requires this or your messages bounce back as errors 
      ConnectionConfiguration connConfig = new ConnectionConfiguration("domain.com", 5222); 
      XMPPConnection connection = new XMPPConnection(connConfig); 

      try { 
       connection.connect(); 
       System.out.println("Connected to " + connection.getHost()); 
      } catch (XMPPException ex) { 
       //ex.printStackTrace(); 
       System.out.println("Failed to connect to " + connection.getHost()); 
       System.exit(1); 
      } 
      try { 
       connection.login(username, password); 
       System.out.println("Logged in as " + connection.getUser()); 

       Presence presence = new Presence(Presence.Type.available); 

       connection.sendPacket(presence); 

      } catch (XMPPException ex) { 
       //ex.printStackTrace(); 
       // XMPPConnection only remember the username if login is succesful 
       // so we can''t use connection.getUser() unless we log in correctly 
       System.out.println("Failed to log in as " + username); 
       System.exit(1); 
      } 

      PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
      connection.addPacketListener(new MessageParrot(connection), filter); 

      /* if(args.length > 0) {*/ 
       // google bounces back the default message types, you must use chat 
       Message msg = new Message("[email protected]", Message.Type.chat); 
       msg.setBody("hi"); 
       // msg.addExtension(new DeliveryReceipt(msg.getPacketID())); 

       /* XHTMLExtension xhtmlExtension = new XHTMLExtension(); 
       xhtmlExtension.addBody(
       "<body>My lord, dispatch; read o'er these articles.</body><request xmlns='urn:xmpp:receipts'/>"); 
       msg.addExtension(xhtmlExtension);*/ 


       /* MessageEventManager.addNotificationsRequests(msg, true, true, true, true); 
       DeliveryReceiptManager.addDeliveryReceiptRequest(msg);*/ 
       connection.sendPacket(msg); 


      System.out.println("Press enter to disconnect\n"); 

      try { 
       System.in.read(); 
      } catch (IOException ex) { 
       //ex.printStackTrace(); 
      } 

      connection.disconnect(); 
     } 

을 촉발 헤로인에서 메시지를 보낼 자바 코드를 사용하고? 연결 대상이 후

connection.setUseStreamManagement(true); 
connection.setUseStreamManagementResumptionDefault(true); 

를 만든 후 코드 아래

답변

0

사용하면 클라이언트가 스트림 관리를 사용하고자하는 의미 <enable xmlns='urn:xmpp:sm:3' resume='true'/> 로그를 확인합니다. 서버가 지원하는 경우 <enabled xmlns='urn:xmpp:sm:3' id='.......' resume='true' max='1'/> 즉 스트림이 현재 활성화되었음을 의미합니다.

로그를 계속 확인하면 클라이언트와 서버간에 교환이 발생하여 <r xmlns='urn:xmpp:sm:3'/><a xmlns='urn:xmpp:sm:3' h='1'/>이 발생합니다.

관련 문제