68 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"log"
 | |
| 	"net"
 | |
| )
 | |
| 
 | |
| type AbstractMulticast struct {
 | |
| 	MIpAddr         string
 | |
| 	MPort           string
 | |
| 	MaxDatagramSize int
 | |
| 	MWaddr          *net.UDPAddr
 | |
| 	MRaddr          *net.UDPAddr
 | |
| 	Wconn           *net.UDPConn
 | |
| 	Rconn           *net.UDPConn
 | |
| }
 | |
| 
 | |
| func (mip *AbstractMulticast) CreateUdpAddr() {
 | |
| 
 | |
| 	// This Will create the local UDP Address
 | |
| 	addr, err := net.ResolveUDPAddr("udp4", mip.MIpAddr+":"+mip.MPort)
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err.Error())
 | |
| 	}
 | |
| 
 | |
| 	mip.MRaddr = addr
 | |
| 	log.Println("Multicast Listen addr created: ", mip.MRaddr.String())
 | |
| 
 | |
| 	// This will create the Writing UDP Addr
 | |
| 
 | |
| 	mip.MWaddr = addr
 | |
| 	log.Println("Multicast Writing addr created: ", mip.MWaddr.String())
 | |
| 
 | |
| }
 | |
| 
 | |
| func (mip *AbstractMulticast) CreateWritingSocket() {
 | |
| 
 | |
| 	conn, err := net.DialUDP("udp4", nil, mip.MWaddr)
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err.Error())
 | |
| 	}
 | |
| 
 | |
| 	mip.Wconn = conn
 | |
| 	log.Println("Multicast Writing Socket Created: ", mip.Wconn.LocalAddr().String(), "->", mip.Wconn.RemoteAddr().String())
 | |
| 
 | |
| }
 | |
| func (mip *AbstractMulticast) CreateReadingSocket() {
 | |
| 
 | |
| 	// Open up a connection
 | |
| 	conn, err := net.ListenMulticastUDP("udp", nil, mip.MRaddr)
 | |
| 	if err != nil {
 | |
| 		log.Fatal("UDP " + err.Error())
 | |
| 	}
 | |
| 
 | |
| 	conn.SetReadBuffer(mip.MaxDatagramSize)
 | |
| 
 | |
| 	mip.Rconn = conn
 | |
| 	log.Println("Multicast Reading Socket Created: ", mip.Rconn.LocalAddr().String())
 | |
| 
 | |
| }
 | |
| 
 | |
| func (mip *AbstractMulticast) GetMulticastReady() {
 | |
| 
 | |
| 	mip.CreateUdpAddr()
 | |
| 	mip.CreateWritingSocket()
 | |
| 	mip.CreateReadingSocket()
 | |
| }
 |