application deletes application instance when it exit's process; adds CountConnections()

This commit is contained in:
Dan Ballard 2018-06-23 08:35:51 -07:00
parent 2dc3739f56
commit a852bc6678
1 changed files with 23 additions and 0 deletions

View File

@ -53,6 +53,23 @@ func (ra *RicochetApplication) handleConnection(conn net.Conn) {
ra.instances = append(ra.instances, rai)
ra.lock.Unlock()
rc.Process(rai)
// rc.Process ends when the connection ends.
// Remove it from the application's list of instances
ra.lock.Lock()
for i, x := range ra.instances {
if x == rai {
if i == 0 {
ra.instances = ra.instances[1:]
} else if i == len(ra.instances)-1 {
ra.instances = ra.instances[:i-1]
} else {
ra.instances = append(ra.instances[:i-1], ra.instances[i+1:]...)
}
break
}
}
ra.lock.Unlock()
}
func (ra *RicochetApplication) HandleApplicationInstance(rai *ApplicationInstance) {
@ -102,10 +119,16 @@ func (ra *RicochetApplication) Broadcast(do func(rai *ApplicationInstance)) {
}
func (ra *RicochetApplication) Shutdown() {
ra.lock.Lock()
ra.l.Close()
for _, instance := range ra.instances {
instance.Connection.Conn.Close()
}
ra.lock.Unlock()
}
func (ra *RicochetApplication) ConnectionCount() int {
return len(ra.instances)
}
func (ra *RicochetApplication) Run(l net.Listener) {