cleanup now works. Clients and agents can connect and disconnect at will.
This commit is contained in:
		
							parent
							
								
									8842c37a66
								
							
						
					
					
						commit
						3b2b9162ba
					
				| @ -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) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user