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 }