2017-06-14 194 views
1

如何在服務器端知道客戶端與服務器連接或斷開連接?ZeroC Ice連接事件

ZeroC Ice是否爲這些事件提供了一些回調函數?

最小演示:

服務器端

try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) 
    { 
     com.zeroc.Ice.ObjectAdapter adapter = 
      communicator.createObjectAdapterWithEndpoints("Hello", "default -h localhost -p 10000"); 
     adapter.add(new HelloI(), com.zeroc.Ice.Util.stringToIdentity("hello")); 
     adapter.activate(); 
     communicator.waitForShutdown(); 
    } 

客戶端

try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) 
    { 
     HelloPrx hello = HelloPrx.checkedCast(communicator.stringToProxy("hello:default -h localhost -p 10000")); 
     hello.sayHello(); 
    } 

回答

0

從服務器端,您可以檢查current.con成員並註冊了密切的回調,如果它是一個連接是不是招」 t見過之前見過setCloseCallback

電流com.zeroc.Ice.Current參數傳遞給所有的僕人方法,例如在sayHello實現,你可以做

@Override 
public void sayHello(int delay, com.zeroc.Ice.Current current) 
{ 
    // Check if current.con is a new connection, you will 
    // need to keep track of that in your code. 

    // Install a close callback for the connection. 
    current.con.setCloseCallback(con -> 
     { 
      // Close callback 
     }); 
} 
+0

代碼示例(我真的不明白,當你說'current.con')?誰是當前的? – TGeorge