receiver/udp/udp.go
func (rcv *UDP) Listen(addr *net.UDPAddr) error {
	return rcv.StartFunc(func() error {
		var err error
		rcv.conn, err = net.ListenUDP("udp", addr)
		if err != nil {
			return err
		}

		rcv.Go(func(exit chan bool) {
			<-exit
			rcv.conn.Close()
		})

		if rcv.buffer != nil {
			originalOut := rcv.out

			rcv.Go(func(exit chan bool) {
				for {
					select {
					case <-exit:
						return
					case p := <-rcv.buffer:
						originalOut(p)
					}
				}
			})

			rcv.out = func(p *points.Points) {
				rcv.buffer <- p
			}
		}

		rcv.Go(rcv.receiveWorker)

		return nil
	})
}
func (rcv *UDP) Listen(addr *net.UDPAddr) error {
	return rcv.StartFunc(func() error {
		var err error
		rcv.conn, err = net.ListenUDP("udp", addr)
		if err != nil {
			return err
		}

		rcv.Go(func(exit chan bool) {
			<-exit
			rcv.conn.Close()
		})

		if rcv.buffer != nil {
			originalOut := rcv.out

			rcv.Go(func(exit chan bool) {
				for {
					select {
					case <-exit:
						return
					case p := <-rcv.buffer:
						originalOut(p)
					}
				}
			})

			rcv.out = func(p *points.Points) {
				rcv.buffer <- p
			}
		}

		rcv.Go(rcv.receiveWorker)

		return nil
	})
}
func ( rcv * UDP ) Listen ( addr * net . UDPAddr ) error { return rcv . StartFunc ( func ( ) error { var err error rcv . conn , err = net . ListenUDP ( " " , addr ) if err != nil { return err } rcv . Go ( func ( exit chan bool ) { <- exit rcv . conn . Close ( ) } ) if rcv . buffer != nil { originalOut := rcv . out rcv . Go ( func ( exit chan bool ) { for { select { case <- exit : return case p := <- rcv . buffer : originalOut ( p ) } } } ) rcv . out = func ( p * points . Points ) { rcv . buffer <- p } } rcv . Go ( rcv . receiveWorker ) return nil } ) }
// Listen bind port. Receive messages and send to out channel
Listen bind port . Receive messages and send to out channel