transformed session delegate

This commit is contained in:
Radu Ioan Fericean
2012-05-08 19:36:21 +03:00
parent ec54af756e
commit 9009aeede2
5 changed files with 48 additions and 23 deletions

View File

@@ -32,10 +32,11 @@ const (
type Session struct {
uuid, cstmId, subject, destination string
startTime time.Time // destination: startTime
sessionDelegate SessionDelegate
stopDebit chan byte
}
func NewSession(ev *Event) (s *Session) {
func NewSession(ev *Event, ed SessionDelegate) (s *Session) {
startTime, err := time.Parse(time.RFC1123, ev.Fields[START_TIME])
if err != nil {
log.Print("Error parsing answer event start time, using time.Now!")
@@ -47,6 +48,7 @@ func NewSession(ev *Event) (s *Session) {
destination: ev.Fields[DESTINATION],
startTime: startTime,
stopDebit: make(chan byte)}
s.sessionDelegate = ed
go s.StartDebitLoop()
return
}
@@ -55,11 +57,10 @@ func (s *Session) StartDebitLoop() {
for {
select {
case <-s.stopDebit:
log.Print("Put back!")
return
default:
}
log.Print("Debit")
s.sessionDelegate.LoopAction()
time.Sleep(DEBIT_PERIOD)
}
}

View File

@@ -52,7 +52,7 @@ var (
)
func TestSessionDurationSingle(t *testing.T) {
s := NewSession(newEvent)
s := NewSession(newEvent, new(DirectSessionDelegate))
defer s.Close()
twoSeconds, _ := time.ParseDuration("2s")
if d := s.GetSessionDurationFrom(s.startTime.Add(twoSeconds)); d.Seconds() < 2 || d.Seconds() > 3 {
@@ -61,7 +61,7 @@ func TestSessionDurationSingle(t *testing.T) {
}
func TestSessionCostSingle(t *testing.T) {
s := NewSession(newEvent)
s := NewSession(newEvent, new(DirectSessionDelegate))
defer s.Close()
twoSeconds, _ := time.ParseDuration("60s")
if cc, err := s.GetSessionCostFrom(s.startTime.Add(twoSeconds)); err != nil {

View File

@@ -22,22 +22,46 @@ import (
"log"
)
type EventDelegate interface {
type SessionDelegate interface {
OnHeartBeat(*Event)
OnChannelAnswer(*Event, *Session)
OnChannelHangupComplete(*Event, *Session)
LoopAction()
}
type DirectEventDelegate byte
type DirectSessionDelegate byte
func (ded *DirectEventDelegate) OnHeartBeat(ev *Event) {
func (dsd *DirectSessionDelegate) OnHeartBeat(ev *Event) {
log.Print("direct hearbeat")
}
func (ded *DirectEventDelegate) OnChannelAnswer(ev *Event, s *Session) {
func (dsd *DirectSessionDelegate) OnChannelAnswer(ev *Event, s *Session) {
log.Print("direct answer")
}
func (ded *DirectEventDelegate) OnChannelHangupComplete(ev *Event, s *Session) {
func (dsd *DirectSessionDelegate) OnChannelHangupComplete(ev *Event, s *Session) {
log.Print("direct hangup")
}
func (dsd *DirectSessionDelegate) LoopAction() {
log.Print("Direct debit")
}
//
type RPCSessionDelegate byte
func (rsd *RPCSessionDelegate) OnHeartBeat(ev *Event) {
log.Print("rpc hearbeat")
}
func (rsd *RPCSessionDelegate) OnChannelAnswer(ev *Event, s *Session) {
log.Print("rpc answer")
}
func (rsd *RPCSessionDelegate) OnChannelHangupComplete(ev *Event, s *Session) {
log.Print("rpc hangup")
}
func (rsd *RPCSessionDelegate) LoopAction() {
log.Print("Rpc debit")
}

View File

@@ -31,9 +31,9 @@ var (
)
type SessionManager struct {
buf *bufio.Reader
sessions []*Session
eventDelegate EventDelegate
buf *bufio.Reader
sessions []*Session
sessionDelegate SessionDelegate
}
func (sm *SessionManager) Connect(address, pass string) {
@@ -46,8 +46,8 @@ func (sm *SessionManager) Connect(address, pass string) {
fmt.Fprint(conn, "event json all\n\n")
}
func (sm *SessionManager) AddEventDelegate(ed EventDelegate) {
sm.eventDelegate = ed
func (sm *SessionManager) SetSessionDelegate(ed SessionDelegate) {
sm.sessionDelegate = ed
}
func (sm *SessionManager) ReadNextEvent() (ev *Event) {
@@ -79,17 +79,17 @@ func (sm *SessionManager) GetSession(uuid string) *Session {
}
func (sm *SessionManager) OnHeartBeat(ev *Event) {
if sm.eventDelegate != nil {
sm.eventDelegate.OnHeartBeat(ev)
if sm.sessionDelegate != nil {
sm.sessionDelegate.OnHeartBeat(ev)
} else {
log.Print("heartbeat")
}
}
func (sm *SessionManager) OnChannelAnswer(ev *Event) {
s := NewSession(ev)
if sm.eventDelegate != nil {
sm.eventDelegate.OnChannelAnswer(ev, s)
if sm.sessionDelegate != nil {
s := NewSession(ev, sm.sessionDelegate)
sm.sessionDelegate.OnChannelAnswer(ev, s)
} else {
log.Print("answer")
}
@@ -97,8 +97,8 @@ func (sm *SessionManager) OnChannelAnswer(ev *Event) {
func (sm *SessionManager) OnChannelHangupComplete(ev *Event) {
s := sm.GetSession(ev.Fields[UUID])
if sm.eventDelegate != nil {
sm.eventDelegate.OnChannelHangupComplete(ev, s)
if sm.sessionDelegate != nil {
sm.sessionDelegate.OnChannelHangupComplete(ev, s)
} else {
log.Print("HangupComplete")
}

View File

@@ -26,7 +26,7 @@ import (
func TestConnect(t *testing.T) {
sm := &SessionManager{}
sm.Connect("localhost:8021", "ClueCon")
sm.AddEventDelegate(new(DirectEventDelegate))
sm.SetSessionDelegate(new(DirectSessionDelegate))
//for {
ev := sm.ReadNextEvent()
if ev == nil {