From 5573ed2da7fda1ecb83636a50e206ad9340480cd Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 15 Jun 2017 19:01:24 +0200 Subject: [PATCH] JSON-RPC2 to handle multiple connections via goroutines, fixes #674 --- cmd/cgr-engine/cgr-engine.go | 4 ++-- sessionmanager/smgbirpc_it_test.go | 5 ++++- utils/server.go | 10 ++++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index adbb9ae6d..2ba886aec 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -174,8 +174,8 @@ func startSmGeneric(internalSMGChan chan *sessionmanager.SMGeneric, internalRate for method, handler := range smgBiRpc.Handlers() { server.BiRPCRegisterName(method, handler) } - //server.BiRPCRegister(smgBiRpc) - go server.ServeBiJSON(cfg.SmGenericConfig.ListenBijson) + server.ServeBiJSON(cfg.SmGenericConfig.ListenBijson) + exitChan <- true } } diff --git a/sessionmanager/smgbirpc_it_test.go b/sessionmanager/smgbirpc_it_test.go index d162a3c4e..160edc254 100644 --- a/sessionmanager/smgbirpc_it_test.go +++ b/sessionmanager/smgbirpc_it_test.go @@ -80,7 +80,10 @@ func TestSMGBiRPCStartEngine(t *testing.T) { // Connect rpc client to rater func TestSMGBiRPCApierRpcConn(t *testing.T) { clntHandlers := map[string]interface{}{"SMGClientV1.DisconnectSession": handleDisconnectSession} - if smgBiRPC, err = utils.NewBiJSONrpcClient(smgBiRPCCfg.SmGenericConfig.ListenBijson, clntHandlers); err != nil { // Connect also simple RPC so we can check accounts and such + if _, err = utils.NewBiJSONrpcClient(smgBiRPCCfg.SmGenericConfig.ListenBijson, clntHandlers); err != nil { // First attempt is to make sure multiple clients are supported + t.Fatal(err) + } + if smgBiRPC, err = utils.NewBiJSONrpcClient(smgBiRPCCfg.SmGenericConfig.ListenBijson, clntHandlers); err != nil { t.Fatal(err) } if smgRPC, err = jsonrpc.Dial("tcp", smgBiRPCCfg.RPCJSONListen); err != nil { // Connect also simple RPC so we can check accounts and such diff --git a/utils/server.go b/utils/server.go index 7e8072a83..522eb89c5 100644 --- a/utils/server.go +++ b/utils/server.go @@ -193,11 +193,13 @@ func (s *Server) ServeBiJSON(addr string) { log.Fatal("ServeBiJSON listen error:", e) } Logger.Info(fmt.Sprintf("Starting CGRateS BiJSON server at <%s>", addr)) - conn, err := lBiJSON.Accept() - if err != nil { - log.Fatal(err) + for { + conn, err := lBiJSON.Accept() + if err != nil { + log.Fatal(err) + } + go s.birpcSrv.ServeCodec(rpc2_jsonrpc.NewJSONCodec(conn)) } - s.birpcSrv.ServeCodec(rpc2_jsonrpc.NewJSONCodec(conn)) } // rpcRequest represents a RPC request.