fbsessionhandler.java
来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 680 行 · 第 1/2 页
JAVA
680 行
sessionStore.open(isRecordStoreOwner);
sessionStore.setUid(_uid);
sessionStore.setSessionKey(_sessionKey);
sessionStore.setSessionSecret(_sessionSecret);
sessionStore.setExpiry(_expires);
sessionStore.close();
}
catch(RecordStoreFullException exception)
{
Logger.printErrorln("Record store is full! " + exception.toString());
}
catch(RecordStoreNotFoundException exception)
{
Logger.printErrorln("Record store could not be found! " + exception.toString());
}
catch(RecordStoreException exception)
{
Logger.printErrorln("Record store generated an exception! " + exception.toString());
}
}
}
public void requestCancelled(IFbAPIRequest request)
{
Logger.printErrorln("A request from the session handler was cancelled!");
setState(0);
synchronized(_dataLock)
{
_currentRequest = null;
}
}
public void requestCompleted(IFbAPIRequest request)
{
_serverTimeStamp = request.getTimeStamp();
if(FbDefines.isAPISuccessful(request.getRequestStatus()) && (request instanceof FbSessionStartRequest))
{
FbSessionStartRequest r = (FbSessionStartRequest)request;
synchronized(_dataLock)
{
_uid = r.getUid();
_sessionKey = r.getSessionKey();
_sessionSecret = r.getSecret();
_expires = r.getExpires();
Logger.println("User has been successfully authenticated. UID: " + _uid + "; Session Key: " + _sessionKey + "; Secret: " + _sessionSecret + "; Expires: " + _expires);
if(_storeSession)
storeSession();
_currentRequest = new FbGetLoggedInUserRequest(this);
}
setState(3);
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
} else
if(FbDefines.isAPISuccessful(request.getRequestStatus()) && (request instanceof FbGetLoggedInUserRequest))
{
FbGetLoggedInUserRequest r = (FbGetLoggedInUserRequest)request;
synchronized(_dataLock)
{
_user = r.getUser();
Logger.println("Logged in user information was successfully retrieved. User name: " + _user.getName() + "; Picture: " + _user.getProfilePictureSquareUrl());
_currentRequest = new FbGetFriendsListRequest(this);
}
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
} else
if(FbDefines.isAPISuccessful(request.getRequestStatus()) && (request instanceof FbGetFriendsListRequest))
{
FbGetFriendsListRequest r = (FbGetFriendsListRequest)request;
synchronized(_dataLock)
{
_friends = r.getFriends();
Logger.println("Logged in user's friends was successfully retrieved. Friend count = " + _friends.size());
Object value;
for(Enumeration keys = _friends.keys(); keys.hasMoreElements(); Logger.println(value.toString()))
{
Object key = keys.nextElement();
value = _friends.get(key);
}
_currentRequest = new FbGetNewsfeedRequest(this, 50);
}
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
} else
if(FbDefines.isAPISuccessful(request.getRequestStatus()) && (request instanceof FbGetNewsfeedRequest))
{
FbGetNewsfeedRequest r = (FbGetNewsfeedRequest)request;
synchronized(_dataLock)
{
_newsFeed = r.getNewsItems();
Logger.println("News feed was successfully retrieved. Feed count = " + _newsFeed.size());
for(int i = 0; i < _newsFeed.size(); i++)
{
Object item = _newsFeed.elementAt(i);
Logger.println(item.toString());
}
}
setState(4);
} else
if(FbDefines.isAPISuccessful(request.getRequestStatus()) && (request instanceof FbGetStatusRequest))
{
FbGetStatusRequest r = (FbGetStatusRequest)request;
synchronized(_dataLock)
{
Hashtable t = r.getStatusTable();
FbStatusItemData status = (FbStatusItemData)t.get(_user.getUid());
if(status != null)
{
FbStatusItemData oldStatus = _user.getStatus();
if(oldStatus == null || !oldStatus.equals(status.getStatusText()))
{
_user = FbItemDataFactory.getInstance().updateStatus(_user, status);
for(int i = 0; i < _statusListeners.size(); i++)
((IFbStatusListener)_statusListeners.elementAt(i)).statusUpdated(_user);
}
} else
{
Logger.printErrorln("Could not get status of user");
}
}
} else
{
Logger.printErrorln("A request from the session handler did not go as planned!");
setState(6);
synchronized(_dataLock)
{
_currentRequest = null;
}
}
}
public Vector getNewsFeed()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 4)
return _newsFeed;
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_CONNECTED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public void setNewsFeed(Vector newsFeed)
throws InvalidStateException
{
label0:
{
synchronized(_dataLock)
{
if(_state < 4)
break label0;
_newsFeed = newsFeed;
}
return;
}
throw new InvalidStateException("Required state for action was atleast FB_SESSION_CONNECTED but it was " + getStateString(_state));
}
public String getUid()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 3)
return _uid;
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_AUTHENTICATED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public FbFriendItemData getUser()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 4)
return _user;
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_CONNECTED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public boolean updateUserStatus()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state < 4)
throw new InvalidStateException("Required state for action was atleast FB_SESSION_CONNECTED but it was " + getStateString(_state));
Vector uids = new Vector();
uids.addElement(_user.getUid());
if(_currentRequest != null)
{
_currentRequest = new FbGetStatusRequest(this, uids);
break MISSING_BLOCK_LABEL_94;
}
return false;
obj;
JVM INSTR monitorexit ;
goto _L1
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
_L1:
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
return true;
}
public FbFriendItemData getFriend(String fid)
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 4)
return (FbFriendItemData)_friends.get(fid);
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_CONNECTED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public synchronized String getSessionKey()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 3)
return _sessionKey;
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_AUTHENTICATED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public synchronized String getSessionSecret()
throws InvalidStateException
{
Object obj = _dataLock;
JVM INSTR monitorenter ;
if(_state >= 3)
return _sessionSecret;
else
throw new InvalidStateException("Required state for action was atleast FB_SESSION_AUTHENTICATED but it was " + getStateString(_state));
Exception exception;
exception;
obj;
JVM INSTR monitorexit ;
throw exception;
}
public static String getStateString(int state)
{
String stateString = "";
switch(state)
{
case 0: // '\0'
stateString = "FB_SESSION_NOT_CONNECTED";
break;
case 1: // '\001'
stateString = "FB_SESSION_AUTHENTICATING";
break;
case 3: // '\003'
stateString = "FB_SESSION_AUTHENTICATED";
break;
case 4: // '\004'
stateString = "FB_SESSION_CONNECTED";
break;
case 5: // '\005'
stateString = "FB_SESSION_DISCONNECTING";
break;
case 6: // '\006'
stateString = "FB_SESSION_ERROR_NOT_CONNECTED";
break;
case 7: // '\007'
stateString = "FB_SESSION_SUCCEDED";
break;
case 2: // '\002'
default:
stateString = "State value not recognized";
break;
}
return stateString;
}
public long getServerTimeStamp()
{
return _serverTimeStamp;
}
private static FbSessionHandler _instance = null;
private long _serverTimeStamp;
private int _state;
private int _expires;
private String _login;
private String _password;
private boolean _storeSession;
private String _sessionKey;
private String _sessionSecret;
private String _uid;
private Vector _observers;
private Vector _statusListeners;
private FbFriendItemData _user;
private Hashtable _friends;
private Vector _newsFeed;
private IFbAPIRequest _currentRequest;
private Object _dataLock;
private Object _observerLock;
private Object _statusLock;
private Object _recordStoreLock;
private boolean isRecordStoreOwner;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?