bitcoin-atm
bitcoin atm for pyc inc.
git clone https://9o.is/git/bitcoin-atm.git
FakeBillAcceptor.scala
(1780B)
1 package inc.pyc.chimera
2 package snippet
3
4 import akka.actor._
5 import akka.actor.FSM._
6 import inc.pyc._
7 import currency._
8 import bill._
9 import acceptor._
10 import Commands._
11 import Events._
12 import concurrent._
13 import duration._
14 import System._
15 import net.liftweb.json._
16
17 /**
18 * For testing only.
19 */
20 class FakeBillAcceptor extends Actor {
21
22 import context.dispatcher
23
24 def overlord = context parent
25 def scheduler = context.system.scheduler
26
27 var escrow: Currency#Value = _
28 var acceptBills = true
29
30 def receive = {
31 case Listen => scheduler.scheduleOnce(1 second)(overlord ! Ready)
32 case Inhibit => acceptBills = true
33 case UnInhibit => acceptBills = false
34 case Inserted(bill) => if(acceptBills) {escrow = bill; overlord ! Inserted(bill)}
35 case Stack => scheduler.scheduleOnce(1 second){overlord ! Confirmed(escrow); escrow = null}
36 case Return => escrow = null
37 }
38 }
39
40 object CreateFakeBillAcceptor {
41 import net.liftweb.util._
42 import xml._
43
44 def render(in: NodeSeq): NodeSeq = {
45 if(Props.productionMode) NodeSeq.Empty
46 else <script data-lift="Acceptor" type="text/javascript"></script>
47 }
48 }
49
50 /**
51 * Send inserted bill commands to the mock bill acceptor
52 * from the client console.
53 * ie. window.acceptor.send(10) // sends $10
54 */
55 class Acceptor extends ChimeraEventRegister {
56
57 val acceptor = system.actorSelection("/user/Overlord/Acceptor")
58
59 val topic = ""
60
61 override val receive: Receive = {
62 case JInt(n) => n.toInt match {
63 case 100 => acceptor ! Inserted(USD(100))
64 case 50 => acceptor ! Inserted(USD(50))
65 case 20 => acceptor ! Inserted(USD(20))
66 case 10 => acceptor ! Inserted(USD(10))
67 case 5 => acceptor ! Inserted(USD(5))
68 case 1 => acceptor ! Inserted(USD(1))
69 }
70 }
71 }