On Monday, November 6, 2017 at 11:49:43 AM UTC-8, Ben Noordhuis wrote:
>
> On Mon, Nov 6, 2017 at 7:56 PM, Russell Haley <[email protected] 
> <javascript:>> wrote: 
> > Hello, 
> > 
> > I'm new to C patterns and I am experimenting with libuv to write a 
> > simulator. The idea is to create a context struct to be passed around as 
> a 
> > pointer/handle to various timed and event based callback functions. I 
> would 
> > like this simulator to have a "heartbeat" that sends UDP every x period, 
> as 
> > well as respond to UDP messages received on a different port. I would 
> like 
> > the system to decides at runtime if there are flags in the context that 
> > block it from sending (i.e. handle->send=0;). 
> > 
> > For bonus points, I would like to be able to start a TCP based module if 
> I 
> > receive a certain message on the UDP receive port and then stop it once 
> the 
> > routine completes. I am hoping I can just drop a routine on the default 
> loop 
> > (from within my uv_udp_recv_cb) for processing until completion which 
> would 
> > be signaled in a TCP callback (haven't delved into the TCP stuff 
> yet...). 
> > 
> > After about 1 hour of searching I haven't found any examples of what I 
> am 
> > trying to do. Most of the example patterns are very simplistic. This 
> dearth 
> > of information leads me to one of two conclusions: 1) I am trying to do 
> > something the wrong way or 2) nobody in the entirety of using libuv has 
> ever 
> > ever ever tried to do what I am attempting now. I assume the problem is 
> the 
> > former. ;) 
> > 
> > What I have so far: 
> > 
> > - An example udp listener from the docs. It listens faithfully on the 
> port I 
> > assign. 
> > - A udp client, again from the docs. My first kick simply sends a 
> message 
> > and then exists . My next planned attempt was to use a timer to send the 
> > information repeatedly. I have realized that the timer callback needs to 
> > have my context handle, which prompted this question. I will finish my 
> > example code and then post it here while awaiting a possible answer. 
> > 
> > Please let me know if I can provide some more background (context? tee 
> hee). 
> > 
> > Regards, 
> > 
> > Russ 
>
> It's not entirely clear to me what you want to accomplish but if you 
> want to attach state/context to a handle or request, you can use the 
> handle->data and req->data fields. or embed them in another struct and 
> use container_of() to look up the embedder.  You can find a 
> container_of() definition in the libuv sources. 
>

Thanks so much for responding. I just stumbled over your answer in uv.h 
(described in UV_HANDLE_FIELDS) and then found it in the documentation. I 
missed the context section at the bottom of the basics page.  :(

Thanks for the answer and sorry for the noise! 

Russ

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to