From c4fe8a6c5fff618e0224beb5db81aba692f2251e Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Thu, 10 May 2012 13:42:20 +0300 Subject: [PATCH] integrated session manager in cgr-rater --- cmd/cgr-console/cgr-console.go | 22 ++++++++++++---------- cmd/cgr-rater/cgr-rater.go | 18 ++++++++++++------ sessionmanager/sessionmanager.go | 8 ++++++++ 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/cmd/cgr-console/cgr-console.go b/cmd/cgr-console/cgr-console.go index 6b3c518e1..16b11229a 100644 --- a/cmd/cgr-console/cgr-console.go +++ b/cmd/cgr-console/cgr-console.go @@ -28,22 +28,24 @@ import ( ) var ( - balancer = flag.String("balancer", "127.0.0.1:2001", "balancer address host:port") - tor = flag.Int("tor", 0, "Type of record") - cstmid = flag.String("cstmid", "vdf", "Customer identificator") - subject = flag.String("subject", "rif", "The client who made the call") - dest = flag.String("dest", "0256", "Destination prefix") - ts = flag.String("ts", "2012-02-09T00:00:00Z", "Time start") - te = flag.String("te", "2012-02-09T00:10:00Z", "Time end") - amount = flag.Float64("amount", 100, "Amount for different operations") + server = flag.String("server", "127.0.0.1:2001", "server address host:port") + tor = flag.Int("tor", 0, "Type of record") + cstmid = flag.String("cstmid", "vdf", "Customer identificator") + subject = flag.String("subject", "rif", "The client who made the call") + dest = flag.String("dest", "0256", "Destination prefix") + ts = flag.String("ts", "2012-02-09T00:00:00Z", "Time start") + te = flag.String("te", "2012-02-09T00:10:00Z", "Time end") + amount = flag.Float64("amount", 100, "Amount for different operations") ) func main() { flag.Parse() - client, _ := jsonrpc.Dial("tcp", "localhost:2001") + client, err := jsonrpc.Dial("tcp", *server) + if err != nil { + log.Fatal("Could not connect to server " + *server) + } defer client.Close() - var err error timestart, err := time.Parse(time.RFC3339, *ts) if err != nil { log.Fatal("Time start format is invalid: ", err) diff --git a/cmd/cgr-rater/cgr-rater.go b/cmd/cgr-rater/cgr-rater.go index 6cf0f31ca..cf714b68c 100644 --- a/cmd/cgr-rater/cgr-rater.go +++ b/cmd/cgr-rater/cgr-rater.go @@ -21,6 +21,7 @@ package main import ( "flag" "fmt" + "github.com/rif/cgrates/sessionmanager" "github.com/rif/cgrates/timespans" "log" "net" @@ -31,10 +32,10 @@ import ( ) var ( - balancer = flag.String("balancer", "127.0.0.1:2000", "balancer address host:port") - listen = flag.String("listen", "127.0.0.1:1234", "listening address host:port") - json = flag.Bool("json", false, "use json for rpc encoding") - storage Responder + balancer = flag.String("balancer", "127.0.0.1:2000", "balancer address host:port") + listen = flag.String("listen", "127.0.0.1:1234", "listening address host:port") + standalone = flag.Bool("standalone", false, "start standalone server (no balancer), and use json for rpc encoding") + storage Responder ) type Responder struct { @@ -146,7 +147,12 @@ func main() { log.Printf("Cannot open storage: %v", err) os.Exit(1) } - if !*json { + if standalone { + sm = &sessionmanager.SessionManager{} + sm.Connect("localhost:8021", "ClueCon") + sm.SetSessionDelegate(new(DirectSessionDelegate)) + sm.StartEventLoop() + } else { go RegisterToServer(balancer, listen) go StopSingnalHandler(balancer, listen, getter) } @@ -176,7 +182,7 @@ func main() { continue } log.Printf("connection started: %v", conn.RemoteAddr()) - if *json { + if *standalone { log.Print("json encoding") go jsonrpc.ServeConn(conn) } else { diff --git a/sessionmanager/sessionmanager.go b/sessionmanager/sessionmanager.go index b79e73668..f6299501d 100644 --- a/sessionmanager/sessionmanager.go +++ b/sessionmanager/sessionmanager.go @@ -46,6 +46,14 @@ func (sm *SessionManager) Connect(address, pass string) { fmt.Fprint(conn, "event json all\n\n") } +func (sm *SessionManager) StartEventLoop() { + go func() { + for { + sm.ReadNextEvent() + } + }() +} + func (sm *SessionManager) SetSessionDelegate(ed SessionDelegate) { sm.sessionDelegate = ed }