feat: support custom connection struct

This commit is contained in:
2025-04-27 15:37:04 +02:00
parent e12437d067
commit 529dad17cf
2 changed files with 10 additions and 15 deletions

View File

@ -4,22 +4,21 @@ import (
"encoding/json"
"errors"
"fmt"
"net"
"slices"
)
type Request struct {
conn net.Conn
conn *Connection
packet *Packet
}
func NewRequest(conn net.Conn, packet *Packet) *Request {
func NewRequest(conn *Connection, packet *Packet) *Request {
return &Request{
conn, packet,
}
}
func (req *Request) Conn() net.Conn {
func (req *Request) Conn() *Connection {
return req.conn
}

View File

@ -2,7 +2,6 @@ package server
import (
"log"
"net"
"github.com/LandaMm/hsp-go/hsp"
)
@ -10,7 +9,7 @@ import (
type RouteHandler func(req *hsp.Request) *hsp.Response
type Router struct {
routes map[string]RouteHandler
routes map[string]RouteHandler
}
func NewRouter() *Router {
@ -26,15 +25,12 @@ func (r *Router) AddRoute(pathname string, handler RouteHandler) {
r.routes[pathname] = handler
}
func (r *Router) Handle(conn net.Conn) error {
func (r *Router) Handle(conn *hsp.Connection) error {
defer conn.Close()
dupl := hsp.NewPacketDuplex(conn)
// TODO: Ability to keep connection alive
packet, err := dupl.ReadPacket()
packet, err := conn.Read()
if err != nil {
_, _ = dupl.WritePacket(hsp.NewErrorResponse(err).ToPacket())
_, _ = conn.Write(hsp.NewErrorResponse(err).ToPacket())
return err
}
@ -43,15 +39,15 @@ func (r *Router) Handle(conn net.Conn) error {
if handler, ok := r.routes[route]; ok {
res := handler(req)
_, err := dupl.WritePacket(res.ToPacket())
_, err := conn.Write(res.ToPacket())
return err
} else if fallback, ok := r.routes["*"]; ok {
res := fallback(req)
_, err := dupl.WritePacket(res.ToPacket())
_, err := conn.Write(res.ToPacket())
return err
}
}
_, err = dupl.WritePacket(hsp.NewStatusResponse(hsp.STATUS_NOTFOUND).ToPacket())
_, err = conn.Write(hsp.NewStatusResponse(hsp.STATUS_NOTFOUND).ToPacket())
return err
}