第十三章

/** {@inheritDoc} */

@Override

public void disconnect(IConnection conn, IScope scope) {

super.disconnect(conn, scope);

}

在方法 connect裏,規定如下的邏輯:

? 用戶在連接時,必須傳遞用戶名,否則就拒絕連接。

? 當用戶名已經存在於服務器端時,我們認為該用戶已經登錄或者異常退出,也拒絕連接。

? 當用戶名不存在於服務器端時,我們認為該用戶為新增用戶,保存其到HashMap裏,並且同步到對應的SharedObject。

? 如果需要同步的SharedObject不存在,我們就創建它,否則更新SharedObject。

下麵逐條實現這些邏輯:用戶連接時傳遞的信息,會以數組的形式存在於參數params裏,假設params裏的第一個參數永遠都是用戶名,代碼如下:

if(params.length ==0)

{

rejectClient("Must pass the login name.");

}

為了方便跟蹤,我們給當前的連接也賦予一個附加屬性,保存傳遞上來的用戶名代碼如下:

String loginname = params[0].toString();

conn.setAttribute("UserName", loginname);

然後開始判斷用戶名是否存在於HashMap裏,如果存在就拒絕當前連接:

if(clientDic.keySet().contains(loginname))

{

rejectClient("The same user has logged in already.");

}

如果是新增的用戶,保存其到HashMap裏:

if(clientDic.keySet().contains(loginname))

{

rejectClient("The same user has logged in already.");

}

else

{

clientDic.put(loginname, conn);

}

然後開始操作SharedObject,如果不存在就創建它:

if(clientDic.keySet().contains(loginname))

{

rejectClient("The same user has logged in already.");

}

else

{