第十三章
/** {@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
{