Next step might actually be the TUI! Or maybe the raw proxy, it would be nice to be able to just run the proxy.
82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"termtap.dev/internal/model"
|
|
)
|
|
|
|
func StartSession(cmd model.Command, addr string) error {
|
|
|
|
// Event type?
|
|
msgs := make(chan model.Message, 128)
|
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
|
|
defer signal.Stop(sigCh)
|
|
|
|
// Start process and proxy
|
|
go StartProxy(addr, msgs)
|
|
go StartProcess(cmd, addr, msgs, sigCh)
|
|
|
|
var events []model.Message
|
|
|
|
var requests []model.Request
|
|
|
|
for {
|
|
select {
|
|
case _ = <-sigCh:
|
|
fmt.Println("\n\nEVENTS")
|
|
printEvents(events)
|
|
fmt.Println("\n\nREQUESTS")
|
|
printRequests(requests)
|
|
return nil
|
|
case msg := <-msgs:
|
|
{
|
|
events = append(events, msg)
|
|
switch msg.Type {
|
|
case model.MessageTypeFatal:
|
|
return fmt.Errorf("%s", msg.Body)
|
|
|
|
case model.MessageTypeRequestStarted:
|
|
log.Printf("[%s] (%s) %s", msg.Type, msg.Request.ID.String(), msg.Body)
|
|
requests = append(requests, msg.Request)
|
|
|
|
case model.MessageTypeRequestFinished, model.MessageTypeRequestFailed:
|
|
log.Printf("[%s] (%s) %s", msg.Type, msg.Request.ID.String(), msg.Body)
|
|
|
|
for i := range requests {
|
|
if requests[i].ID == msg.Request.ID {
|
|
requests[i] = msg.Request
|
|
break
|
|
}
|
|
}
|
|
|
|
default:
|
|
log.Printf("[%s] %s", msg.Type, msg.Body)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// DEBUG
|
|
func printEvents(events []model.Message) {
|
|
for _, event := range events {
|
|
fmt.Printf("%+v\n", event)
|
|
}
|
|
}
|
|
|
|
func printRequests(reqs []model.Request) {
|
|
for _, req := range reqs {
|
|
fmt.Printf("%+v\n", req)
|
|
for k, v := range req.QueryMap {
|
|
fmt.Printf("key: %s, vals: %+v\n", k, v)
|
|
}
|
|
}
|
|
}
|