From a852bc66780ebaef7cfc148a8944fa875c905c20 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Sat, 23 Jun 2018 08:35:51 -0700 Subject: [PATCH] application deletes application instance when it exit's process; adds CountConnections() --- application/application.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/application/application.go b/application/application.go index 5321dae..04918b1 100644 --- a/application/application.go +++ b/application/application.go @@ -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) {