feat: Initial revision
This commit is contained in:
9
pkg/model/model.go
Normal file
9
pkg/model/model.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package model
|
||||
|
||||
type Event struct{}
|
||||
|
||||
type ClipboardUpdated struct {
|
||||
Event
|
||||
Content []byte `json:"content"`
|
||||
ContentType string `json:"contentType"`
|
||||
}
|
||||
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