[Haskell-cafe] question about interruptable state runner

Antoine Latter aslatter at gmail.com
Fri Jun 10 15:51:19 CEST 2011


On Thu, Jun 9, 2011 at 4:04 PM, Alexander V Vershilov
<alexander.vershilov at gmail.com> wrote:
> Hello.
>
> Thu, Jun 09, 2011 at 01:40:51PM -0500, Antoine Latter wrote
>> On Thu, Jun 9, 2011 at 3:14 PM, Alexander V Vershilov
>> <alexander.vershilov at gmail.com> wrote:
>> > Hello.
>> >
>> > I'm writing a small tcp server with that can handle connections and
>> > answer by rules writen in a small script that can be interpreted by server.
>> > For this purpose I've written an interpreter that has type
>> >
>> >  ErrorT MyError (StateT ScriptState IO)
>> >
>> > so I can call "native" IO function in that script, and define new one.
>> >  I can run this script with runState (runErrorT (...)) oldState.
>> >
>> > But there is one problem: in script i should be able to call functions that
>> > will stop script interpretation and wait for some server event. To continue
>> > interpretation.
>> >
>>
>> What do you mean by 'server event'? How do you plan on representing
>> these events?
>>
>
> I'm using term server event for next thing when server get some message from
> client it generate 'server event' i.e. some action or save this event in event
> queue. And then forces this queue to act.
>
> So simplified workflow looks like:
>  client                 server                             interpretator
> 1 *sends some messages -> save parsed messages in queue
> 2 *send 'END' message  -> forces functions F(message) from
>                          queue
> 3                        *some F is to call interpretator  -> run script
> 4                                                          <-  *call server
>                         <- send messages to client           callback
>                         goto step 2                       <- *finish script
>
> * - stand for event initiator. Here everything can be done in a straitforward way.
>
> What I want to do and do know a good way for:
> client        server          -> run script
>                                ...
>                             <- call 'wait' command
>          <-> *goto 1
> ...
> send 'END' -> continue script ->
>
> Sorry if I do not answer on your question directly.
>
> --
> Best regards,
>  Alexander V Vershilov
>

The next question - are you waiting for the client to open a new
connection to your server and send the result, or are you waiting for
the client to send a response on an already open socket?

If the later, the GHC IO manager will halt your thread of execution
and wake it back up once the socket has data on it.

If the former, you'll need to explore some of the solutions Heinrich
has put forth.

>> > Can smb give an advice what is the best way to do it?
>> >
>> > --
>> > Best regards
>> >  Alexander V Vershilov
>> >
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>



More information about the Haskell-Cafe mailing list