<div dir="ltr"><div><div><div>great...many thanks for all this explanation!<br><br></div>I've changed for the way you said [1] and it's working.<br><br></div>Just one more question: I don't know if this is related to telepathy but when I receive a message at Empathy and the chat window is not open, it appears a little box at the bottom of the screen with that message. I saw at the debug log that a new channel is being created. When I click this box, it opens the chat window but the messages received while the chat window was closed doesn't appears there. Do you know if there is some property of the request map that I should set to maintain these received messages  with window chat closed?<br></div><div><div><br><br>[1] <a href="https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR483">https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR483</a><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-07-23 5:09 GMT-03:00 George Kiagiadakis <span dir="ltr"><<a href="mailto:gkiagia@tolabaki.gr" target="_blank">gkiagia@tolabaki.gr</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 23.07.2016 07:16, Mateus Bellomo wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
George,<br>
<br>
I could make it work but for that I have swaped the initiatorHandle and<br>
targetHandle on the onMessageReceived() method. You could see at [1] what I<br>
did. Doing this, the channel created has the same parameters when I do a<br>
createChannel() [2] operation and the message sent and receive are now<br>
appearing at same window [3].<br>
<br>
I don't know if this implementation is the most suitable, what do you think?<br>
<br>
[1]<br>
<a href="https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR498" rel="noreferrer" target="_blank">https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR498</a><br>
[2]<br>
<a href="https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR650" rel="noreferrer" target="_blank">https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR650</a><br>
[3] <a href="https://mateusbellomo.wordpress.com/" rel="noreferrer" target="_blank">https://mateusbellomo.wordpress.com/</a><br>
<br>
</blockquote>
<br></span>
No, this doesn't look correct. First of all, I can see targetHandle is assigned to the contact from the "to" header, and since this is a "message received" method, the "to" is your self contact, not the remote one. In 1-1 channels, TargetHandle must be the remote contact.<br>
<br>
I just had a look at how telepathy-qt implements ensureChannel() and now I fully understand what telepathy-morse is doing there too...<br>
<br>
So, ensureChannel() will check if there is already a channel for this message and if there is, it will use it, otherwise it will create a new one. When you receive a new message for an existing channel, it is practically impossible to know who is the "initiator", i.e. who started the channel. If the channel is already created, then it is the channel that knows this information, not the message. Therefore, ensureChannel() does *not* use the "InitiatorHandle" to match an existing channel, it only uses the "TargetHandleType" and "TargetHandle". But, if the channel is not already created, then it creates it. In this case, it needs to know who is the initiator and uses the "InitiatorHandle" property.<br>
<br>
What does this mean for your code? It means that "TargetHandleType" and "TargetHandle" identify your channel and "InitiatorHandle" identify the contact that would be initiating the channel if it wasn't already created. To explain it in a simple map:<br>
<br>
* Receiving a message from a remote contact on a 1-to-1 chat:<br>
TargetHandleType: contact<br>
TargetHandle: remote contact handle<br>
InitiatorHandle: remote contact handle<br>
<br>
* Sending a message to a remote contact on a 1-to-1 chat:<br>
TargetHandleType: contact<br>
TargetHandle: remote contact handle<br>
InitiatorHandle: local 'self' contact handle<br>
<br>
* Receiving a message from a remote contact on a room:<br>
TargetHandleType: room<br>
TargetHandle: room handle<br>
InitiatorHandle: remote contact handle<br>
<br>
* Sending a message to a remote contact on a room:<br>
TargetHandleType: room<br>
TargetHandle: room handle<br>
InitiatorHandle: local 'self' contact handle<br>
<br>
Practically, your onMessageReceived() method falls in the first of the 4 cases above, so "TargetHandle" and "InitiatorHandle" actually need to be the same contact handle, the one from the h_From header. Telepathy-morse also tries to cover the 3rd case (room), which is why it is a bit more confusing.<span class="HOEnZb"><font color="#888888"><br>
<br>
George</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
telepathy mailing list<br>
<a href="mailto:telepathy@lists.freedesktop.org" target="_blank">telepathy@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/telepathy" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/telepathy</a><br>
</div></div></blockquote></div><br></div>