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 + -
显示快捷键?