Right now I am writing a chat application I am having a list of messages initially when the message was sent it had status property sending after getting network confirmation it should update and change to sent after getting confirmation whether the message is received by the recipient it should change to delivered and then to seen what is the ideal approach to do this I thought a way to copy the properties of that message and after changing status insert that particular message at that index since my message class is immutable.
Thank you.
are you using a streambuilder? I think using a streambuilder should get this done, you can give it a try if you are not using it already.
Related
I also have a same problem as mentioned here. But, I went ahead with the approach of randomizing my resource so as to maintain the session in multiple tabs/windows. Also, I get carbon message (LINK) in all tabs/windows.
My only concern is, I'm saving chat history using (store.js) in my browser. And if 5 tabs are opened, then message gets saved 5 times. Which is a repeat.
How can I determine to how many tabs/windows the message was sent?
Based on the count I want to apply my logic to save the message only once.
You can count the number of tabs from Javascript because, you are sandbox to your own tab for security reason.
However, what you can do is ensure your client have unique id on the message tag and you can check on write if your message has already been written in your store or not.
I'm trying to implement chat for my webapp with following features:
When user logs in he should see a number of unread messages (which is both offline messages and "unseen", I will explain "unseen" in next step).
When user is anywhere in the app but on chat window he should be notified that he has a new message. Message should be marked "unseen" and must be added to the count of unread messages.
The first point is quite easily achieved using XEP-0013: Flexible Offline Message Retrieval. So I can retrieve offline messages and when I'm sure user has seen them - I remove them from unread list. But the problem is: how do I achieve same thing for "unseen" messages?
In short what I need is: any message should be marked as offline, unless user sees it and it's removed from the list by explicit request.
Can I achieve that with XMPP and how do I do that?
Thanks in advance.
What you are trying to do is to basically store a counter of unseen stuff in your account. I think you do not need flexible offline retrieval as when you connect the messages would simply become unseen. You thus only have to deal with one case: Unseen.
I will reply from the perspective of ejabberd, that I know better as one of the developer: I would use private storage to store your current state of unseen count and conversation.
Is there a way to modify a Message in the MessageQueue without removing it?
IDEA here is that an App (app1) sends a message to MSMQ, which APP (app2) listens to MSMQ
and retrieves the message. app2 has to update the data (Message.Body) which will is used
for future reference. Finally app3 will remove it after message is processed.
I am afraid the answer is NO. Messaging provider are not built for this scenario. The only way to "update" a message is to retrieve that message, modify it and put it back again. But note that updated message is another message altogether, not same as the one put by first application.
I need to get the Id of a msmq message inside of my handler so I can write that Id to a log.
When a message is sent to the error queue an email is sent informing us of a failed message. Once the error that caused the message is resolved we need to use the 'ReturnToSourceQueue' NServiceBus tool to try that message again. Without logging that Id, it would be difficult to track down which message is which when looking through the message queues.
Every where I've looked suggests that Bus.CurrentMessageContext.Id will give me the same Id that's in the Message ID column when looking at the queues in ComputerManagement->Services and Applications->Message Queuing->[Some Queue]->Queue messages. However, those ids don't seem to be the same.
What am I missing?
The reason that the message ID that you see in MMC plugin or Queue Explorer is different is that when the message is "moved" to the error queue, what actually happens is that a new MSMQ message is created with the same body and headers and that is sent to the error queue.
Also, when the processing a message fails, NServiceBus already logs this for you and includes the ID of the message, so that's already done for you.
If you take the ID that was logged and pass that to the ReturnToSourceQueue tool, everything will just work.
The last piece of the puzzle for you is sending an email when a message fails. Now, I'm not sure that that is the wisest idea as you may end up spamming your ops team when a database goes offline or a 3rd party webservice becomes unresponsive. Still, if that's what you want to do, then I'd suggest using an email appender for when errors are logged.
Finally, let me say that we're in the process of building this kind of notification functionality into the Particular Service Platform around NServiceBus. We've got a UI showing errors and allowing messages to be reprocessed coming as a beta in November '13 and the notification functionality will probably be ready towards the end of the year.
It's really a question of whether you want to wait or to build this yourself.
Just create an instance of your bus in your handler:
public IBus Bus { get; set; }
Then use that to get the message id:
this.Bus.CurrentMessageContext.Id
The Bus instance will be injected when the handler is called.
EDIT
Now that I have actually read the question...
The CurrentMessageContext.Id returns what's in the message header under the CorrId field. This can be seen in the Label column in Server Management.
The Message ID displayed in the MessagId column is the message ID as it existed on the sending computer. I am not sure how to access this value from CurrentMessageContext but you should not need to do this to find a local message.
I'm working on an email client for iOS. Currently I'm using MailCore for IMAP/SMTP interactions. I'm currently working on getting message previews for the inbox view. The only way I can think to do this would be to actually fetch the whole message body (only body for speed) from the server, and then display only a portion of the message. But then I would have to download the whole message again (this time all headers, etc) when the user opens the message. This seems a bit inefficient to me, but I can't figure out another way to approach this. I've considered just downloading the entirety of each message to begin with, but that seems like an abuse of user's mobile data, and it would be slower to populate the inbox with previews. Any thoughts on how to approach message previews?
Also, for the purposes of this question, assume that the message sender name, date, subject and flags are already loaded on the device.
there exists a raw fetch command but am not sure if there exists any wrapper api on top it.
FETCH 2 (BODY[]<0.size>)
for example if you want to fetch first 100 bytes of mail then you can fire a command as
FETCH 2 (BODY[]<0.100>)