package srt import ( "net" ) type Tunnel struct { socket net.PacketConn peer net.Addr queue chan []byte broken bool state *SRTManager } func (tunnel *Tunnel) Start() { tunnel.state = new(SRTManager) for { packet, err := tunnel.ReadPacket() if err != nil { tunnel.broken = true } response, err := tunnel.state.Decide(packet) if err != nil { tunnel.broken = true } if response != nil { tunnel.WritePacket(response) } } } func (tunnel *Tunnel) WritePacket(packet *Packet) { buffer, err := MarshallPacket(packet) if err != nil { tunnel.broken = true return } tunnel.socket.WriteTo(buffer, tunnel.peer) } func (tunnel *Tunnel) ReadPacket() (*Packet, error) { packet := <- tunnel.queue return ParsePacket(packet) }