-
-
Save bruinbrown/f8a45074f5bc114d1b69 to your computer and use it in GitHub Desktop.
A demonstration of an area where Akka.Net shines
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Akka.Actor; | |
using Akka.Dispatch; | |
using CallCentre.Messages.CallInitiatorMessages; | |
using CallCentre.Messages.OperatorMessages; | |
using CallCentre.Messages.RouterMessages; | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
using System.Web; | |
namespace CallCentre.Actors | |
{ | |
public class CallCentreOperator : ReceiveActor | |
{ | |
private ActorSelection _callInitiator; | |
private ActorSelection _callRouter; | |
private string OperatorContactNumber { get { return String.Format("client:{0}", Self.Path.Name); } } | |
public CallCentreOperator() | |
{ | |
_callInitiator = Context.ActorSelection("/user/twiliocallinitiator"); | |
_callRouter = Context.ActorSelection("/user/callrouter"); | |
Become(Idle); | |
} | |
public void Offline() | |
{ | |
Receive<AgentConnected>(m => { Become(Idle); }); | |
} | |
public void Idle() | |
{ | |
Receive<AgentDisconnected>(m => { Become(Offline); }); | |
Receive<IncomingCallMessage>(m => | |
{ | |
string url = String.Format("/twilio/client_connected?conference={0}", m.ConferenceId); | |
_callInitiator.Tell(new CreateCall(OperatorContactNumber, url)); | |
_callRouter.Tell(new OperatorUnavailable()); | |
Become(InCall); | |
}); | |
} | |
public void InCall() | |
{ | |
Receive<AgentDisconnected>(m => { Become(Offline); }); | |
Receive<CallCompleteMessage>(m => | |
{ | |
Become(Wrapup); | |
Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(10.0), Self, new OperatorReadyUp(), Sender); | |
}); | |
} | |
public void Wrapup() | |
{ | |
Receive<AgentDisconnected>(m => { Become(Offline); }); | |
Receive<OperatorReadyUp>(m => | |
{ | |
Become(Idle); | |
_callRouter.Tell(new OperatorAvailable()); | |
}); | |
} | |
public void Busy() | |
{ | |
Receive<AgentDisconnected>(m => { Become(Offline); }); | |
Receive<OperatorReadyUp>(_ => { Become(Idle); }); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment