44 lines
862 B
Go
44 lines
862 B
Go
package proxy
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
|
|
"termtap.dev/internal/model"
|
|
)
|
|
|
|
func NewProxyServer(addr string, ch chan<- model.Event) (*model.ProxyServer, error) {
|
|
listener, err := net.Listen("tcp", addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
url := fmt.Sprintf("http://%s", listener.Addr().String())
|
|
|
|
ps := &model.ProxyServer{
|
|
Listener: &listener,
|
|
Server: &http.Server{Handler: proxyHandler(ch)},
|
|
Url: url,
|
|
}
|
|
|
|
return ps, nil
|
|
}
|
|
|
|
// BUG: Not sure what all this does
|
|
func Destroy(ps *model.ProxyServer, ch chan<- model.Event) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
|
defer cancel()
|
|
|
|
if ps != nil && ps.Server != nil {
|
|
_ = ps.Server.Shutdown(ctx)
|
|
ch <- model.Event{
|
|
Time: time.Now().Local(),
|
|
Type: model.EventTypeProxyStarted,
|
|
Body: "proxy server was destroyed",
|
|
}
|
|
}
|
|
}
|