/**
* @auth geniuseoe2012
* @blog http://blog.csdn.net/geniuseoe2012
* @date 2013-1-6
* @description nothing to say
*/
package com.talent.allshare.service;
import org.cybergarage.upnp.ControlPoint;
import org.cybergarage.upnp.Device;
import org.cybergarage.upnp.device.DeviceChangeListener;
import org.cybergarage.upnp.device.SearchResponseListener;
import org.cybergarage.upnp.ssdp.SSDPPacket;
import org.cybergarage.util.CommonLog;
import org.cybergarage.util.LogFactory;
import com.talent.allshare.network.ControlCenterRunnable;
import com.talent.allshare.network.UpnpUtil;
import com.talent.allshare.proxy.AllShareProxy;
import com.talent.allshare.proxy.DeviceBrocastFactory;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class DlnaService extends Service implements DeviceChangeListener, ControlCenterRunnable.ISearchDeviceListener{
private static final CommonLog log = LogFactory.createLog();
public static final String SEARCH_DEVICES = "com.talent.allshare.search_device";
public static final String RESET_SEARCH_DEVICES = "com.talent.allshare.reset_search_device";
private ControlPoint mControlPoint;
private Thread mSearchDeviceThread = null;
private ControlCenterRunnable mControlCenterRunnable = null;
private AllShareProxy mAllShareProxy;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
log.e("DlnaService onCreate");
init();
}
@Override
public void onStart(Intent intent, int startId) {
log.e("DlnaService onStart");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getAction() != null){
String action = intent.getAction();
if (DlnaService.SEARCH_DEVICES.equals(action)) {
search();
}else if (DlnaService.RESET_SEARCH_DEVICES.equals(action)){
reset();
}
}else{
log.e("intent = " + intent);
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
log.e("DlnaService onDestroy");
unInit();
super.onDestroy();
}
private void init(){
mControlPoint = new ControlPoint();
mControlPoint.addDeviceChangeListener(this);
mControlPoint.addSearchResponseListener(new SearchResponseListener() {
public void deviceSearchResponseReceived(SSDPPacket ssdpPacket) {
}
});
mControlCenterRunnable = new ControlCenterRunnable(this, mControlPoint);
mControlCenterRunnable.setSearchListener(this);
mAllShareProxy = AllShareProxy.getInstance(this);
}
private void unInit(){
mControlCenterRunnable.setSearchListener(null);
mControlCenterRunnable.exit();
mControlPoint.stop();
}
private void search(){
if (mSearchDeviceThread == null){
mSearchDeviceThread = new Thread(mControlCenterRunnable);
mSearchDeviceThread.start();
}else{
mControlCenterRunnable.notifyThread();
}
}
private void reset(){
mControlCenterRunnable.reset();
}
@Override
public void deviceAdded(Device dev) {
if (UpnpUtil.isValidDevice(dev)){
mAllShareProxy.addDevice(dev);
}
}
@Override
public void deviceRemoved(Device dev) {
if (UpnpUtil.isValidDevice(dev)){
mAllShareProxy.removeDevice(dev);
}
}
@Override
public void onSearchComplete(boolean searchSuccess) {
if (!searchSuccess){
DeviceBrocastFactory.sendSearchDeviceFailBrocast(this);
}
}
}