Yes, I am aware that's what happens. And in these cases I can make it execute at the end of a messageReceived. But my case is that I do something from a non io-processor thread, but what it does needs to be synced with the io-processor.
Emmanuel Lécharny wrote > Let's be clear: > > - reads will result in a messageReceived event and you will be able to > process it and do whatever you want to do in your IoHandler, as soon as > the message is complete (ie, if the message is read in chunks, you will > only receive a messageReceived event once the message is complete) > > - writes is a bit different: you do write, and you either decide to do > something *after* the write has been executed, but without any guarantee > that the message has been fully sent to the remote host, *or* you > execute your action when you receive the messageSent event - which means > you have written a message, *and* it has been fully sent to the remote > peer. > > In any case, you are still in the IoProcessor thread, so you can do > whatever you want (except that if you decide to do what you want to do > when receiving the messageSent, it will be executed later on, only if > the message has been fully sent. > > > On 14/02/2019 16:56, kevintjuh93 wrote: >> It's for a game server where actions need to be synchronized with >> read/write >> in order to make sure everything is done in order. Not everything is >> executed from read/write methods, so I cannot ensure a message is being >> received/sent and look at some queue for this. >> >> That's why I want to execute something on the same thread a read/write >> event >> is done for a specific session. >> >> >> Jonathan Valliere-3 wrote >>> I just read the last email Kevin wrote. >>> >>> Kevin, if you could execute something on the IO processor thread; you >>> understand that It would be a deferred action that could only happen >>> after >>> the IO processor is done? Maybe you could explain the reason why you >>> want >>> to do this? >>> >>> On Thu, Feb 14, 2019 at 10:40 AM Emmanuel Lécharny < >>> elecharny@ >>> > >>> wrote: >>> >>>> I still don't get it. >>>> >>>> Your IoHandler will be called everytime an event occurs (message >>>> received, message written, session created/closed/idling, exception). >>>> You have the opportunity to execute some action at this moment. >>>> >>>> >>>> Beside that, I don't see a use case. I'm probably missing something... >>>> Unless what you want to do is to have another session to be called >>>> while >>>> processing an event, using the thread you are in ? >>>> >>>> >>>> On 14/02/2019 16:21, Jonathan Valliere wrote: >>>>> There are some examples in the unit tests which accomplish this by >>>> creating >>>>> a Client and Server connection. I don't believe there is a true >>>> loopback >>>>> implementation in Mina without going through the OS networking. >>>>> >>>>> On Thu, Feb 14, 2019 at 10:16 AM kevintjuh93 < >>> kevin_kal@ >>> > >>>> wrote: >>>>>> Hi guys, >>>>>> >>>>>> What I mean is that I want a way to execute something for an >>>>>> IoSession >>>> in >>>>>> the same thread the I/O events run. I figured a good way would be to >>>> 'fake' >>>>>> an incoming message, called a loopback packet. Like write a message >>>>>> to >>>>>> 'yourself'. >>>>>> >>>>>> I rather like to avoid using an ExecutorFilter or a lock. >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Sent from: >>>>>> >>>> http://apache-mina.10907.n7.nabble.com/Apache-MINA-Developer-Forum-f6809.html >> >> >> >> >> -- >> Sent from: >> http://apache-mina.10907.n7.nabble.com/Apache-MINA-Developer-Forum-f6809.html -- Sent from: http://apache-mina.10907.n7.nabble.com/Apache-MINA-Developer-Forum-f6809.html