오프라인 메시지를 받으면이 기능을 시작할 것이라고 말하는 코드가 있습니다. 나는이 중 원하는 무엇erlang, ejabberd, 처리 방법 [{text, <<>>, <<"hello">>}] 형식 :
{message,<<"purple2d957668">>,chat,<<>>,undefined,{jid,<<"admin">>,<<"localhost">>,<<"5280">>,<<"admin">>,<<"localhost">>,<<"5280">>},[],[{text,<<>>,<<"Hello">>}],undefined,[{xmlel,<<"active">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/chatstates">>}],[]}],#{}}
내 메시지를 포함하는 일부입니다
offline_msg_received(From, To, Packet) ->
패킷이 코드를 다음과 같이 찾고 있습니다. :
[{text,<<>>,<<"Hello">>}]
전체 패키지 변수와 일치하는 패턴으로이 부분을 얻을 수 있습니다. 그러나, 내 메시지와 일치하는 패턴을 시도했을 때, 그것은 나쁜 주장을 말합니다. 나는 변수를 단지
으로 지정하면{text,<<>>,<<"Hello">>}
을 지정할 수 있다는 것을 알고 있습니다. 내 이해에서 뭔가를 둘러싼 []는 그것이 목록 또는 문자열이라는 것을 의미합니다.
여기에 일부 코드를 표시 할 수 있습니다. 이제
{P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11} = Packet, %% P8 is the message I want.
?INFO_MSG("----------------------P8: ~p~n", P8), %% This shows {text,<<>>,<<"Hello">>}
{A, B, C} = P8, %% This gives me a badmatch error.
, 내가 대신 코드 쉘에서 수동으로 작업을 수행하는 경우 :
{text,<<>>,<<"Hello">>} = P8,
{A, B, C} = P8,
그런 다음 코드가 작동하고, C 변수에 >> "안녕하세요"< <을 둔다.
내 생각 엔 그 []를 "패키지"변수 내 badmatch 오류와 함께 할 수있는 뭔가가,하지만 난 P8을 인쇄 할 때 몇 가지 이유로 그 기호는 표시되지 않습니다에서 주위. 아무도 좋은 제안을 왜 작동하지 않는가? 나는 숨겨진 []과 관련이 있다고 추측합니다. 그렇지 않으면 쉘 코드 테스트와 동일 해 보입니다.
감사합니다. 이것은 처음 질문을 던지기 때문에 잘못된 것이 아니기를 바랍니다.
'# message.body'에서 텍스트를 얻으려면'xmpp : get_text/1' 또는'xmpp : get_text/2' 함수를 사용하는 것이 좋습니다. 후자는 언어로 텍스트를 선택해야 할 때 유용합니다. 또 다른 요점은'xmpp_codec.hrl'을 직접 포함해서는 안된다는 것입니다. 대신'xmpp.hrl'을 포함하십시오. – user2610053