feat: Initial revision
This commit is contained in:
		
							
								
								
									
										42
									
								
								pkg/net/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								pkg/net/client.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| package net | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"net" | ||||
|  | ||||
| 	"github.com/AdrianoKF/go-clip/pkg/model" | ||||
| ) | ||||
|  | ||||
| type Client struct { | ||||
| 	addr    net.UDPAddr | ||||
| 	handler HandlerFunc | ||||
| } | ||||
|  | ||||
| func NewClient(addr net.UDPAddr, handler HandlerFunc) *Client { | ||||
| 	instance := &Client{ | ||||
| 		addr, | ||||
| 		handler, | ||||
| 	} | ||||
| 	return instance | ||||
| } | ||||
|  | ||||
| func (c Client) SendEvent(msg model.ClipboardUpdated) error { | ||||
| 	conn, err := net.DialUDP("udp4", nil, &c.addr) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
|  | ||||
| 	buf := make([]byte, 0) | ||||
| 	w := bytes.NewBuffer(buf) | ||||
| 	encoder := json.NewEncoder(w) | ||||
| 	encoder.Encode(msg) | ||||
|  | ||||
| 	_, err = conn.Write(w.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										43
									
								
								pkg/net/server.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								pkg/net/server.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| package net | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
|  | ||||
| 	"github.com/AdrianoKF/go-clip/internal/util" | ||||
| ) | ||||
|  | ||||
| type Server struct { | ||||
| 	addr    net.UDPAddr | ||||
| 	Handler HandlerFunc | ||||
| } | ||||
|  | ||||
| func NewServer(addr net.UDPAddr, handler HandlerFunc) *Server { | ||||
| 	instance := &Server{ | ||||
| 		addr, | ||||
| 		handler, | ||||
| 	} | ||||
| 	return instance | ||||
| } | ||||
|  | ||||
| func (s Server) Listen() { | ||||
| 	conn, err := net.ListenMulticastUDP("udp4", nil, &s.addr) | ||||
| 	if err != nil { | ||||
| 		util.Logger.Error("Error listening on UDP", err) | ||||
| 		return | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
|  | ||||
| 	buf := make([]byte, maxDatagramSize) | ||||
| 	for { | ||||
| 		n, addr, err := conn.ReadFromUDP(buf) | ||||
| 		if err != nil { | ||||
| 			util.Logger.Error("Error reading from UDP", err) | ||||
| 			return | ||||
| 		} | ||||
| 		util.Logger.Info("Received UDP packet from ", addr, " with ", n, " bytes") | ||||
|  | ||||
| 		if s.Handler != nil { | ||||
| 			go s.Handler(addr, n, buf) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										9
									
								
								pkg/net/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								pkg/net/types.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| package net | ||||
|  | ||||
| import "net" | ||||
|  | ||||
| const ( | ||||
| 	maxDatagramSize = 8192 | ||||
| ) | ||||
|  | ||||
| type HandlerFunc func(*net.UDPAddr, int, []byte) | ||||
		Reference in New Issue
	
	Block a user