cleanup now works. Clients and agents can connect and disconnect at will.

This commit is contained in:
Erik Brakkee 2024-07-19 21:48:54 +02:00
parent 8842c37a66
commit 3b2b9162ba

View File

@ -105,12 +105,48 @@ func (admin *Admin) addClient(publicId string, conn *iowrappers.WebSocketConn) (
return agent, nil
}
func (admin *Admin) RemoveAgent(publicId string) error {
admin.mutex.Lock()
defer admin.mutex.Unlock()
agent := admin.agents[publicId]
if agent == nil {
return fmt.Errorf("Cannot remove agent: '%s' not found", publicId)
}
agent.agent = nil
if agent.client == nil {
log.Printf("Removing agent: '%s'", publicId)
delete(admin.agents, publicId)
}
return nil
}
func (admin *Admin) RemoveClient(publicId string) error {
admin.mutex.Lock()
defer admin.mutex.Unlock()
agent := admin.agents[publicId]
if agent == nil {
return fmt.Errorf("Cannot remove agent: '%s' not found", publicId)
}
agent.client = nil
if agent.agent == nil {
log.Printf("Removing client: '%s'", publicId)
delete(admin.agents, publicId)
}
return nil
}
func (admin *Admin) Register(publicId string, conn *iowrappers.WebSocketConn) error {
defer conn.Close()
agent, err := admin.addAgent(publicId, conn)
if err != nil {
return err
}
defer func() {
admin.RemoveAgent(publicId)
}()
log.Printf("After defer remove agent\n")
agent.agentAvailable <- true
log.Printf("Agent registered: '%s'\n", publicId)
<-agent.clientClosed
@ -123,6 +159,9 @@ func (admin *Admin) Connect(publicId string, conn *iowrappers.WebSocketConn) err
if err != nil {
return err
}
defer func() {
admin.RemoveClient(publicId)
}()
<-agent.agentAvailable
log.Printf("Connecting client and agent: '%s'\n", publicId)
iowrappers.SynchronizeStreams(agent.client, agent.agent)
@ -130,6 +169,14 @@ func (admin *Admin) Connect(publicId string, conn *iowrappers.WebSocketConn) err
return nil
}
func (admin *Admin) log() {
log.Println("CONNECTIONS")
for _, agent := range admin.agents {
log.Println(agent.publicId)
}
log.Printf("\n")
}
func parsePublicId(path string) (publicId string, _ error) {
pattern := regexp.MustCompile("^/[^/]+/([^/]+)$")
matches := pattern.FindStringSubmatch(path)