Skip to content

Commit

Permalink
refactor: one port to bind them all (#197)
Browse files Browse the repository at this point in the history
* refactor: listener to only one

* refactor: into methods
  • Loading branch information
haveachin authored Nov 16, 2023
1 parent 4b236cc commit 42e4859
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 245 deletions.
4 changes: 1 addition & 3 deletions cmd/infrared/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import (

func main() {
srv := ir.New(
ir.AddListenerConfig(
ir.WithListenerBind(":25565"),
),
ir.WithBindAddr(":25565"),
ir.AddServerConfig(
ir.WithServerDomains("*"),
ir.WithServerAddress(":25566"),
Expand Down
92 changes: 44 additions & 48 deletions pkg/infrared/infrared.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,15 @@ import (
)

type Config struct {
ListenerConfigs []ListenerConfig
ServerConfigs []ServerConfig
BindAddr string
ServerConfigs []ServerConfig
}

type ConfigFunc func(cfg *Config)

func AddListenerConfig(fns ...ListenerConfigFunc) ConfigFunc {
func WithBindAddr(bindAddr string) ConfigFunc {
return func(cfg *Config) {
var lCfg ListenerConfig
for _, fn := range fns {
fn(&lCfg)
}
cfg.ListenerConfigs = append(cfg.ListenerConfigs, lCfg)
cfg.BindAddr = bindAddr
}
}

Expand All @@ -42,9 +38,9 @@ func AddServerConfig(fns ...ServerConfigFunc) ConfigFunc {
type Infrared struct {
cfg Config

listeners []*Listener
srvs []*Server
bufPool sync.Pool
l net.Listener
srvs []*Server
bufPool sync.Pool
}

func New(fns ...ConfigFunc) *Infrared {
Expand All @@ -65,18 +61,15 @@ func New(fns ...ConfigFunc) *Infrared {
}

func (ir *Infrared) init() error {
for _, lCfg := range ir.cfg.ListenerConfigs {
l, err := NewListener(func(cfg *ListenerConfig) {
*cfg = lCfg
})
if err != nil {
return err
}
ir.listeners = append(ir.listeners, l)
l, err := net.Listen("tcp", ir.cfg.BindAddr)
if err != nil {
return err
}
ir.l = l

for _, sCfg := range ir.cfg.ServerConfigs {
ir.srvs = append(ir.srvs, NewServer(WithServerConfig(sCfg)))
srv := NewServer(WithServerConfig(sCfg))
ir.srvs = append(ir.srvs, srv)
}

return nil
Expand All @@ -88,37 +81,40 @@ func (ir *Infrared) ListenAndServe() error {
}

sgInChan := make(chan ServerRequest)
for _, l := range ir.listeners {
go func(l net.Listener) {
for {
c, err := l.Accept()
if err != nil {
log.Println(err)
continue
}

go func(c net.Conn) {
conn := newConn(c)
defer func() {
conn.ForceClose()
connPool.Put(conn)
}()

conn.srvReqChan = sgInChan

if err := ir.handleConn(conn); err != nil {
log.Println(err)
}
}(c)
}
}(l)
}

sg := serverGateway{
Servers: ir.srvs,
requestChan: sgInChan,
}
return sg.listenAndServe()
go sg.listenAndServe()

return ir.listenAndServe(sgInChan)
}

func (ir *Infrared) listenAndServe(srvReqChan chan<- ServerRequest) error {
for {
c, err := ir.l.Accept()
if err != nil {
// TODO: Handle Listener closed
log.Println(err)
continue
}

go ir.handleNewConn(c, srvReqChan)
}
}

func (ir *Infrared) handleNewConn(c net.Conn, srvReqChan chan<- ServerRequest) {
conn := newConn(c)
defer func() {
conn.ForceClose()
connPool.Put(conn)
}()

conn.srvReqChan = srvReqChan

if err := ir.handleConn(conn); err != nil {
log.Println(err)
}
}

func (ir *Infrared) handleConn(c *conn) error {
Expand Down Expand Up @@ -148,7 +144,7 @@ func (ir *Infrared) handleConn(c *conn) error {
ReadPks: c.readPks,
ResponseChan: respChan,
}

resp := <-respChan
if resp.Err != nil {
return resp.Err
Expand Down
194 changes: 0 additions & 194 deletions pkg/infrared/listener.go

This file was deleted.

0 comments on commit 42e4859

Please sign in to comment.