How do I disconnect a Scala Remote Actor? -


in scala easy make connection remote actor, documentation not tell me disconnecting. throwing away reference not work, because remote actors actors, these won't collected until stopped. how disconnect?

this not terminate after exit:

import actors.{daemonactor,remote} import remote.{remoteactor,node}  object simpleclient{     val messagehandler = new daemonactor{         def act{             loop{                 react{                     case message:string =>                         println("got message: " + message)                     case _ =>                 }             }         }         start     }      def main(args:array[string]){         val server = remoteactor.select(node("localhost",9999),'server)         server.send('connect,messagehandler)          var exit = false         while(!exit){             val message = console.readline             if(message == "exit" || message == "quit") {                 exit = true                 server ! 'disconnect             }             else                 server ! message         }     } } 

this server:

import actors.{actor,outputchannel} import actors.remote.remoteactor  object server extends actor{     val clients = new collection.mutable.hashset[outputchannel[any]]     def act{         loop{             react{                 case 'connect =>                     clients += sender                 case 'disconnect =>                     clients -= sender                 case message:string =>                     for(client <- clients)                         client ! message             }         }     }      def main(args:array[string]){         start         remoteactor.alive(9999)         remoteactor.register('server,this)     } } 

here's working version of source, pertinent changes commented inline:

import actors.{daemonactor,remote} import remote.{remoteactor,node}  case class send(message: string) case object disconnect  object simpleclient{     val messagehandler = new daemonactor{         def act{           // keep reference proxy inside client-side actor           val server = remoteactor.select(node("localhost",9999),'server)           server ! 'connect           loop{              react{                 case message:string =>                    println("got message: " + message)                 case send(message) => server ! message                 case disconnect => {                     // disconnect , exit client-side actor                    server ! 'disconnect //'                    exit                 }                 case _ =>               }           }       }       start    }     def main(args:array[string]){       var exit = false       while(!exit){          val message = console.readline          if(message == "exit" || message == "quit") {             exit = true             // tell client-side actor exit             messagehandler ! disconnect          } else {             messagehandler ! send(message)          }       }    } } 

Comments

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -