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" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"net"
"slices" "slices"
) )
type Request struct { type Request struct {
conn net.Conn conn *Connection
packet *Packet packet *Packet
} }
func NewRequest(conn net.Conn, packet *Packet) *Request { func NewRequest(conn *Connection, packet *Packet) *Request {
return &Request{ return &Request{
conn, packet, conn, packet,
} }
} }
func (req *Request) Conn() net.Conn { func (req *Request) Conn() *Connection {
return req.conn return req.conn
} }

View File

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