2010-11-19 2 views
2

두 클라이언트가 Smack (스칼라/자바)으로 프로그래밍 된 봇과 (2) strophe (자바 스크립트)에 프로그래밍 된 GUI 채팅 클라이언트와 상호 작용하는 XMPP 애플리케이션이 있습니다.XMPP에서 사용자 정의 XML 요소를 교환하는 가장 좋은 방법은 무엇입니까?

응용 프로그램은 (아래 예를 들어, 등) 사용자 정의 XML

<myPacket> 
    <response type='sensorData'> 
     <temperature units='Kelvin'> 
     234 
     </temperature> 
    </response> 
</myPacket> 

데이터를 교환 할 수있는 가장 좋은 방법은 무엇입니까를 교환 할 필요가 있겠습니까? 사용자 정의 XMPP는

2) 예를 들어, 헤로인에 대한 메시지 또는 IQ)

3)에서 현재 정의 스탠자 (내 XML을 삽입 스 D)

1 쓰기 : 다음은 내가 가지고 올 수있는 무엇인가 use the Message.get(set)Property to read/write custom data.

3)은 두 클라이언트가 모두 Java 객체를 이해하고 동일한 라이브러리 (Smack)를 사용해야하기 때문에 제외됩니다.

같은 문제를 해결하는 다른 질문을 보내주십시오.

[편집 :] 일부 연구를 수행 한 후 라이브러리를 지원하면 Dataforms (XEP-0004)를 사용하는 것이 가장 쉬운 방법이라는 것을 알게되었습니다.

+2

클라이언트의하위 요소를 사용하여 사용자 정의 네임 스페이스가있는 각 XMPP 스탠자에 사용자 정의 XML 데이터를 보냅니다. 예 : .... 그런 스탠자는 다른 설정이 필요없이 클라이언트 봇에 의해 수신됩니다. –

+0

의견을 주셔서 감사합니다. 결국 데이터 폼과 함께 자식 요소를 사용하기로 결정했습니다. – Jus12

+0

dataforms (XEP-004)가 완벽하게 완료되지 못하는 어려운 방법을 발견했습니다. 사용자 정의 인코딩 (예 : 메시지 스탠자 내에서 JSON)을 사용하는 것이 좋습니다. 이것은 우리가 어디에서나 끝내는 것입니다. – Jus12

답변

3

데이터가 어떻게 사용되는지에 따라 크게 달라집니다. 엄지 손가락의 원칙은 키 - 값 쌍 (단순 데이터) 만 전달하는 경우 Smack의 속성 기능을 사용한다는 것입니다. 그러나 속성 기능은 Message에서만 사용할 수 있습니다. 어떤 이유로 Smack의 프로 바이더 아키텍처는 사용하지 않지만, PacketPacketParserUtils 클래스로 하드 코드됩니다. 따라서 IQ 또는 Presence 패킷에서 재사용 할 수없는 경우.

키 - 값 쌍 이상을 사용하려는 경우, 사용자 정의 스탠자에 대한 제공자를 작성해야합니다. 약간의 작업이지만 일단 마샬링/언 마샬링을 구현하면 사용자 스 탠자는 Smack 프레임 워크에서 거의 모든 곳에서 작동합니다. 자세한 내용은 Smacks provider architecture을 참조하십시오.

나는 post 중 하나에서 제공자를 작성하는 것에 관한 블로그를했습니다. 이 게시물의 주된 신뢰는 아니지만 도움이 되길 바랍니다.

+0

답변 해 주셔서 감사합니다. 나는 Smack 속성이 Smack-only 코드로 제한되어 있기 때문에 좋은 옵션이 아니라고 생각한다. 나는 자신의 스탠자를 구현하기 위해 공급자 아키텍처를 점검 할 것이다. 블로그 항목은 유용합니다. – Jus12

관련 문제