feat: support custom connection struct
This commit is contained in:
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user