fbsessionhandler.java
来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 680 行 · 第 1/2 页
JAVA
680 行
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3)
// Source File Name: FbSessionHandler.java
package com.sonyericsson.fb.api;
import com.sonyericsson.fb.api.data.FbFriendItemData;
import com.sonyericsson.fb.api.data.FbItemDataFactory;
import com.sonyericsson.fb.api.data.FbStatusItemData;
import com.sonyericsson.fb.api.request.FbAPIRequestWorker;
import com.sonyericsson.fb.api.request.FbGetFriendsListRequest;
import com.sonyericsson.fb.api.request.FbGetLoggedInUserRequest;
import com.sonyericsson.fb.api.request.FbGetNewsfeedRequest;
import com.sonyericsson.fb.api.request.FbGetStatusRequest;
import com.sonyericsson.fb.api.request.FbSessionStartRequest;
import com.sonyericsson.fb.api.request.IFbAPIRequest;
import com.sonyericsson.fb.api.request.IFbAPIRequestListener;
import com.sonyericsson.fb.utils.*;
import java.security.*;
import java.util.*;
import javax.microedition.rms.*;
import se.southend.drops.screen.ScreenEngine;
// Referenced classes of package com.sonyericsson.fb.api:
// IFbSessionHandlerStateListener, InvalidStateException, IFbStatusListener, FbDefines
public class FbSessionHandler
implements IFbAPIRequestListener
{
public static FbSessionHandler getInstance()
{
if(_instance == null)
_instance = new FbSessionHandler();
return _instance;
}
private FbSessionHandler()
{
_serverTimeStamp = -1L;
_state = 0;
_expires = 0;
_login = "";
_password = "";
_storeSession = false;
_sessionKey = "";
_sessionSecret = "";
_uid = "";
_observers = new Vector();
_statusListeners = new Vector();
_friends = new Hashtable();
_newsFeed = null;
_currentRequest = null;
_dataLock = new Object();
_observerLock = new Object();
_statusLock = new Object();
_recordStoreLock = new Object();
isRecordStoreOwner = !ScreenEngine.getInstance().isRunningOnHomescreen();
loadSession();
}
public boolean hasStoredSession()
{
return _sessionKey.length() > 0 && _sessionSecret.length() > 0 && _uid.length() > 0;
}
public void addObeserver(IFbSessionHandlerStateListener listener)
{
synchronized(_observerLock)
{
removeObserver(listener);
_observers.addElement(listener);
}
}
public void removeObserver(IFbSessionHandlerStateListener listener)
{
synchronized(_observerLock)
{
int i = 0;
do
{
if(i >= _observers.size())
break;
if(_observers.elementAt(i) == listener)
{
_observers.removeElementAt(i);
break;
}
i++;
} while(true);
}
}
public void addStatusListener(IFbStatusListener listener)
{
synchronized(_statusLock)
{
removeStatusListener(listener);
_statusListeners.addElement(listener);
}
}
public void removeStatusListener(IFbStatusListener listener)
{
synchronized(_statusLock)
{
int i = 0;
do
{
if(i >= _statusListeners.size())
break;
if(_statusListeners.elementAt(i) == listener)
{
_statusListeners.removeElementAt(i);
break;
}
i++;
} while(true);
}
}
public boolean isConnected()
{
boolean connected = false;
synchronized(_dataLock)
{
connected = _state == 4;
}
return connected;
}
public void setConnected(String uid, String sessionkey, String sessionsecret)
{
synchronized(_dataLock)
{
if(_state == 0)
{
_sessionKey = sessionkey;
_sessionSecret = sessionsecret;
_uid = uid;
_currentRequest = new FbGetLoggedInUserRequest(this);
setState(3);
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
}
}
}
private void setState(int state)
{
int oldState = 0;
synchronized(_dataLock)
{
if(state == 0)
{
_expires = 0;
_password = "";
_sessionKey = "";
_sessionSecret = "";
_storeSession = false;
_uid = "";
_user = null;
_friends.clear();
_newsFeed.removeAllElements();
_login = "";
}
oldState = _state;
_state = state;
}
synchronized(_observerLock)
{
for(int i = 0; i < _observers.size(); i++)
{
IFbSessionHandlerStateListener listener = (IFbSessionHandlerStateListener)_observers.elementAt(i);
if(!listener.FbSessionStateChanged(_state, oldState))
{
_observers.removeElementAt(i);
i--;
}
}
}
}
public void startSession(String user, String password, boolean storeSession)
throws InvalidStateException
{
if(_state == 0 || _state == 6)
{
setState(1);
processStartSession();
synchronized(_dataLock)
{
_login = user;
_password = password;
_storeSession = storeSession;
_currentRequest = new FbSessionStartRequest(_login, _password, this);
}
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
} else
{
throw new InvalidStateException("Required state for action was FB_SESSION_NOT_CONNECTED but it was " + getStateString(_state));
}
}
public boolean startStoredSession()
throws InvalidStateException
{
if(!hasStoredSession())
return false;
if(_state == 0)
{
synchronized(_dataLock)
{
_currentRequest = new FbGetLoggedInUserRequest(this);
}
setState(3);
FbAPIRequestWorker.getInstance().addAPIRequest(_currentRequest);
} else
{
throw new InvalidStateException("Required state for action was FB_SESSION_NOT_CONNECTED but it was " + getStateString(_state));
}
return true;
}
public synchronized String calculateSignature(Hashtable parameterTable, String secretKey)
{
String result = new String("");
if(parameterTable.size() == 0)
return result;
StringVector parameterList = new StringVector();
String key;
String value;
for(Enumeration e = parameterTable.keys(); e.hasMoreElements(); parameterList.addElement(key + "=" + value))
{
key = (String)e.nextElement();
value = (String)parameterTable.get(key);
}
parameterList.sort();
String str = new String("");
for(int i = 0; i < parameterList.size(); i++)
str = str + parameterList.elementAt(i);
str = str + secretKey;
MessageDigest md5 = null;
try
{
md5 = MessageDigest.getInstance("MD5");
}
catch(NoSuchAlgorithmException e)
{
Logger.printErrorln("Could not find the requested message digest method: " + e.toString());
return result;
}
md5.update(str.getBytes(), 0, str.length());
byte hash[] = new byte[str.length()];
int hashSize = 0;
try
{
hashSize = md5.digest(hash, 0, hash.length);
}
catch(DigestException e)
{
Logger.printErrorln("Could not digest message: " + e.toString());
}
if(hashSize > 0)
result = Utilities.toHexString(hash, 0, hashSize);
return result;
}
public synchronized String createDeepLink(String url)
throws InvalidStateException
{
String result = new String("");
Hashtable parameters = new Hashtable();
parameters.put("api_key", "cab9b0c2b22b9628e5d4966412f1c1a1");
parameters.put("t", String.valueOf(System.currentTimeMillis() / 1000L));
parameters.put("uid", getUid());
parameters.put("url", url);
String signature = calculateSignature(parameters, "4c2ba82712e7fc831c0ad4f9865922ae");
parameters.put("sig", signature);
result = "http://m.facebook.com/auth.php?api_key=" + parameters.get("api_key").toString() + "&t=" + parameters.get("t").toString() + "&uid=" + parameters.get("uid").toString() + "&url=" + Utilities.encodeUrl(parameters.get("url").toString()) + "&sig=" + parameters.get("sig").toString();
Logger.println("FbSessionHandler.createDeepLink(): Created deeplink - " + result);
return result;
}
private void processStartSession()
{
_uid = "";
_sessionKey = "";
_sessionSecret = "";
_expires = 0;
storeSession();
}
private void loadSession()
{
synchronized(_dataLock)
{
_uid = "";
_sessionKey = "";
_sessionSecret = "";
_expires = 0;
}
synchronized(_recordStoreLock)
{
try
{
FbRecordStore recordStore = new FbRecordStore();
recordStore.open(isRecordStoreOwner);
_uid = recordStore.getUid();
_sessionKey = recordStore.getSessionKey();
_sessionSecret = recordStore.getSessionSecret();
_expires = recordStore.getExpiry();
recordStore.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());
}
}
}
private void storeSession()
{
synchronized(_recordStoreLock)
{
try
{
FbRecordStore sessionStore = new FbRecordStore();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?