feat: change project structure

This commit is contained in:
2025-04-16 13:14:10 +02:00
parent 9c55ea257d
commit 83b2368ba1
7 changed files with 574 additions and 0 deletions

54
hsp/server/router.go Normal file
View File

@ -0,0 +1,54 @@
package server
import (
"errors"
"log"
"net"
"github.com/LandaMm/hsp-go/hsp"
)
type RouteHandler func(req *hsp.Request) *hsp.Response
type Router struct {
Routes map[string]RouteHandler
}
func NewRouter() *Router {
return &Router{
Routes: make(map[string]RouteHandler),
}
}
func (r *Router) AddRoute(pathname string, handler RouteHandler) {
if _, ok := r.Routes[pathname]; ok {
log.Printf("WARN: Rewriting existing route '%s'\n", pathname)
}
r.Routes[pathname] = handler
}
func (r *Router) Handle(conn net.Conn) error {
defer conn.Close()
log.Printf("Got new connection from %s\n", conn.RemoteAddr().String())
dupl := hsp.NewPacketDuplex(conn)
// TODO: Ability to keep connection alive
packet, err := dupl.ReadPacket()
if err != nil {
return err
}
if route, ok := packet.Headers["route"]; ok {
log.Printf("[ROUTER] New connection to '%s'", route)
if handler, ok := r.Routes[route]; ok {
req := hsp.NewPacketRequest(conn.RemoteAddr(), packet)
res := handler(req)
_, err := dupl.WritePacket(res.ToPacket())
return err
}
}
return errors.New("Not Found")
}