Hi,

I have the happy circumstance of having used EventMachine recently and I
think I can answer your question below.

On Thu, Jul 12, 2012 at 2:37 PM, Eliezer Croitoru <eliezer / ngtech.co.il>wrote:

> I wrote my server in pure eventmachine source at:
> https://github.com/elico/**echelon <https://github.com/elico/echelon>
>
> i am struggling to understand something.
> in eventmachine i have "receive_data" method with a "data" variable and
> the send_data(data) method.
>
> i have implemented the server logic as :
> ##
> def post_init
>         cleanup_all_data
> end
>
> def receive_data(data)
>         #data parsing code
>         send_data(response)
>         cleanup_all_data
> end
> ##
>
> but do i really need to cleanup data? if it's a tcp socket and non
> persistent connection then it's a dedicated connection and when it's closed
> all the data is dead? or it's an endless loop i need to cleanup the data
> for the next connection?
>
>
post_init is used to initialize variables after instantiating the server,
so all the instance variables will not point to nil.

Secondly, in the EventMachine rdoc describing receive_data, EventMachine
*knows absolutely nothing about the protocol which your code implements*.
What it means is that you must define how receive_data will separate the
data stream because it otherwise will not know where the stream ends.
Notice that the code is using pos =~ /\r\n\r\n/ followed by
@icap_header[:data] = @data[0..pos+1] to cap the stream and then calling
cleanup to start over for a new stream.

This all happens on the same connection. A new connection would use a new
server instance with its own instance variables.

You could try instead using the BufferedTokenizer class, which will split
the received data into an array of tokenized entities using a delimiter
(the default is "\n", but in this case you would use "\r\n\r\n"). You can
then iterate through the array using the each method, passing your code as
a block.

Lastly, there is a forum for EventMachine at
https://groups.google.com/forum/?fromgroups#!forum/eventmachine


> Thanks,
> Eliezer
>
>
> --
> Eliezer Croitoru
> https://www1.ngtech.co.il
> IT consulting for Nonprofit organizations
> eliezer <at> ngtech.co.il
>
>
> Alan