connected(RouterPrx router, SessionPrx session) { string category = router.getCategoryForClient(); long timeout = router.getSessionTimeout(); Ice.Connection conn = router.ice_getCachedConnection(); lock (this) { _router = router; if (_destroy) { // // Run the destroyInternal in a thread. This is because it // destroyInternal makes remote invocations. // Thread t = new Thread(new ThreadStart(destroyInternal)); t.Start(); return; } // // Cache the category. // _category = category; // // Assign the session after _destroy is checked. // _session = session; _connected = true; Debug.Assert(_sessionRefresh == null); if (timeout > 0) { _sessionRefresh = new SessionRefreshThread(this, _router, (int)(timeout * 1000) / 2); _refreshThread = new Thread(new ThreadStart(_sessionRefresh.run)); _refreshThread.Start(); } } dispatchCallback(delegate() { try { _callback.connected(this); } catch (Glacier2.SessionNotExistException) { destroy(); } }, conn); }
public override int run(string[] args) { if(args.Length > 0) { Console.Error.WriteLine(appName() + ": too many arguments"); return 1; } string name; do { Console.Out.Write("Please enter your name ==> "); Console.Out.Flush(); name = Console.In.ReadLine(); if(name == null) { return 1; } name = name.Trim(); } while(name.Length == 0); Ice.ObjectPrx basePrx = communicator().propertyToProxy("SessionFactory.Proxy"); SessionFactoryPrx factory = SessionFactoryPrxHelper.checkedCast(basePrx); if(factory == null) { Console.Error.WriteLine("invalid proxy"); return 1; } SessionPrx session = factory.create(name); SessionRefreshThread refresh = new SessionRefreshThread(communicator().getLogger(), 5000, session); Thread refreshThread = new Thread(new ThreadStart(refresh.run)); refreshThread.Start(); List<HelloPrx> hellos = new List<HelloPrx>(); menu(); try { bool destroy = true; bool shutdown = false; while(true) { Console.Out.Write("==> "); Console.Out.Flush(); string line = Console.In.ReadLine(); if(line == null) { break; } if(line.Length > 0 && Char.IsDigit(line[0])) { int index = Int32.Parse(line); if(index < hellos.Count) { HelloPrx hello = hellos[index]; hello.sayHello(); } else { Console.Out.WriteLine("Index is too high. " + hellos.Count + " hello objects exist so far.\n" + "Use `c' to create a new hello object."); } } else if(line.Equals("c")) { hellos.Add(session.createHello()); Console.Out.WriteLine("Created hello object " + (hellos.Count - 1)); } else if(line.Equals("s")) { destroy = false; shutdown = true; break; } else if(line.Equals("x")) { break; } else if(line.Equals("t")) { destroy = false; break; } else if(line.Equals("?")) { menu(); } else { Console.Out.WriteLine("Unknown command `" + line + "'."); menu(); } } // // The refresher thread must be terminated before destroy is // called, otherwise it might get ObjectNotExistException. refresh // is set to 0 so that if session.destroy() raises an exception // the thread will not be re-terminated and re-joined. // refresh.terminate(); refreshThread.Join(); refresh = null; if(destroy) { session.destroy(); } if(shutdown) { factory.shutdown(); } } catch(System.Exception) { // // The refresher thread must be terminated in the event of a // failure. // if(refresh != null) { refresh.terminate(); refreshThread.Join(); refresh = null; } throw; } return 0; }
connected(RouterPrx router, SessionPrx session) { string category = router.getCategoryForClient(); long timeout = router.getSessionTimeout(); Ice.Connection conn = router.ice_getCachedConnection(); lock(this) { _router = router; if(_destroy) { // // Run the destroyInternal in a thread. This is because it // destroyInternal makes remote invocations. // Thread t = new Thread(new ThreadStart(destroyInternal)); t.Start(); return; } // // Cache the category. // _category = category; // // Assign the session after _destroy is checked. // _session = session; _connected = true; Debug.Assert(_sessionRefresh == null); if(timeout > 0) { _sessionRefresh = new SessionRefreshThread(this, _router, (int)(timeout * 1000)/2); _refreshThread = new Thread(new ThreadStart(_sessionRefresh.run)); _refreshThread.Start(); } } dispatchCallback(delegate() { try { _callback.connected(this); } catch(Glacier2.SessionNotExistException) { destroy(); } }, conn); }
public override int run(string[] args) { if (args.Length > 0) { Console.Error.WriteLine(appName() + ": too many arguments"); return(1); } string name; do { Console.Out.Write("Please enter your name ==> "); Console.Out.Flush(); name = Console.In.ReadLine(); if (name == null) { return(1); } name = name.Trim(); }while(name.Length == 0); var basePrx = communicator().propertyToProxy("SessionFactory.Proxy"); var factory = SessionFactoryPrxHelper.checkedCast(basePrx); if (factory == null) { Console.Error.WriteLine("invalid proxy"); return(1); } SessionPrx session = factory.create(name); var refresh = new SessionRefreshThread(communicator().getLogger(), 5000, session); var refreshThread = new Thread(new ThreadStart(refresh.run)); refreshThread.Start(); var hellos = new List <HelloPrx>(); menu(); try { bool destroy = true; bool shutdown = false; while (true) { Console.Out.Write("==> "); Console.Out.Flush(); var line = Console.In.ReadLine(); if (line == null) { break; } if (line.Length > 0 && Char.IsDigit(line[0])) { int index = Int32.Parse(line); if (index < hellos.Count) { HelloPrx hello = hellos[index]; hello.sayHello(); } else { Console.Out.WriteLine("Index is too high. " + hellos.Count + " hello objects exist so far.\n" + "Use `c' to create a new hello object."); } } else if (line.Equals("c")) { hellos.Add(session.createHello()); Console.Out.WriteLine("Created hello object " + (hellos.Count - 1)); } else if (line.Equals("s")) { destroy = false; shutdown = true; break; } else if (line.Equals("x")) { break; } else if (line.Equals("t")) { destroy = false; break; } else if (line.Equals("?")) { menu(); } else { Console.Out.WriteLine("Unknown command `" + line + "'."); menu(); } } // // The refresher thread must be terminated before destroy is // called, otherwise it might get ObjectNotExistException. refresh // is set to 0 so that if session.destroy() raises an exception // the thread will not be re-terminated and re-joined. // refresh.terminate(); refreshThread.Join(); refresh = null; if (destroy) { session.destroy(); } if (shutdown) { factory.shutdown(); } } catch (Exception) { // // The refresher thread must be terminated in the event of a // failure. // if (refresh != null) { refresh.terminate(); refreshThread.Join(); refresh = null; } throw; } return(0); }
RefreshI(SessionHelper helper, SessionRefreshThread thread) { _thread = thread; _helper = helper; }