package com.owwlo.courier.s.poster;
import android.content.Context;
import android.os.HandlerThread;
import android.os.Message;
import android.util.Log;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* 在CourierSService的OnCreate函数中初始化
*/
public class MessagePosterManager {
private static final String TAG = "CourierSMessagePosterManager";
private static MessagePosterManager sMessagePoster;
private Context mContext;
private HandlerThread mMessagePosterThread;
private LinkedList<Poster> mPosterList;
private int mTcpListenPort;
private List<PosterManagerListener> mPosterManagerListeners;
public MessagePosterManager(Context paramContext) {
mContext = paramContext;
mPosterList = new LinkedList<Poster>();
mPosterManagerListeners =
Collections.synchronizedList(new ArrayList<PosterManagerListener>());
}
public static MessagePosterManager getInstance() {
return sMessagePoster;
}
public static void init(Context paramContext) {
sMessagePoster = new MessagePosterManager(paramContext);
sMessagePoster.initData();
}
private void initData() {
mTcpListenPort = getIdleTcpPort();
mMessagePosterThread = new HandlerThread(TAG);
mMessagePosterThread.start();
preparePoster(new SocketPoster(mContext));
}
// TODO get a free port for host listening
private int getIdleTcpPort() {
return 55837;
}
public int getTcpListeningPort() {
return mTcpListenPort;
}
private void preparePoster(Poster paramPoster) {
paramPoster.init();
paramPoster.addPosterListener(new Poster.PosterListener() {
public void OnReceiveMessageFromClient(Socket paramAnonymousSocket,
Message paramAnonymousMessage) {
Log.i(MessagePosterManager.TAG, "There is Message Form PC!");
}
@Override
public void onLastClientExit() {
for (PosterManagerListener listener : mPosterManagerListeners) {
listener.onLastClientExit();
}
}
});
mPosterList.add(paramPoster);
}
public void sendMessage(Message msg) {
for (Poster poster : mPosterList) {
poster.sendMessage(msg);
}
}
public boolean isConnectedToHost() {
for (Poster poster : mPosterList) {
if (poster.getConnectedCount() > 0) {
return true;
}
}
return false;
}
public static interface PosterManagerListener {
public abstract void onLastClientExit();
}
public void addPosterManagerListener(PosterManagerListener listener) {
mPosterManagerListeners.add(listener);
}
public void removePosterManagerListener(PosterManagerListener listener) {
mPosterManagerListeners.remove(listener);
}
}