abstract class - Use case classes as messages in Scala -
am following sample code in horstman book (pages 291-292) define , use case classes messages in simple scala actor system.
the problem case classes not being recognized in receive pattern matching , control falling through case _ => statement.
the code listed below. works non case class messages.
sender: in actor rcoord act method is:
def act() { alive(9000) register('rcoord, self) proc_reg.start // start process register actor loop { try { receive { case 'process => process_counter += 1 process_number = process_counter spawn_process(process_number, sprocs) case class createts(xxx: int) proc_reg ! createts(process_number) case 'stats => console.println("received msg client view statistics") //sender ! 'ok case 'stop => console.println("received msg client terminating") //sender ! 'bye } // end receive } catch { receiver: in actor proc_reg act method is:
def act() { console.println("process register started") case class createts(process_number: int) case class updatets(process_number: int) loop { receive { case createts(process_number) => console.println("create ts msg received process "+process_number) register_proc(process_number) case updatets(process_number) => console.println("update ts msg received process "+process_number) update_proc(process_number) case _ => console.println("sender is: "+sender.tostring) //console.println("full msg is: "+msg.tostring) } // end receive } // end loop } // end act()
you have 2 different classes same name createts.
you sending createts defined in sender , trying receive message of other type same name in receiver.
you should move declarations of case classes method body in scope of both methods.
note scala actors deprecated, should use akka actors.
Comments
Post a Comment