package com.engine.invasion.engine.engine;
import java.util.HashMap;
public class ServiceManager {
private HashMap<Object, Service> mDeadServices;
private HashMap<Object, Service> mLiveServices;
public ServiceManager() {
mDeadServices = new HashMap<Object, Service>();
mLiveServices = new HashMap<Object, Service>();
}
public void addService(Object serviceID, Service service) {
mLiveServices.put(serviceID, service);
}
@SuppressWarnings("unchecked")
public <T extends Service> T getService(Class<T> type) {
T service = null;
try {
service = (T) mLiveServices.get(type);
} catch (Exception ex) {
}
return service;
}
public void update() {
if (!mDeadServices.isEmpty()) {
for (HashMap.Entry<Object, Service> deadService : mDeadServices.entrySet()) {
mLiveServices.remove(deadService.getKey());
}
mDeadServices.clear();
}
for (HashMap.Entry<Object, Service> entry : mLiveServices.entrySet()) {
Object serviceID = entry.getKey();
Service service = entry.getValue();
switch (service.getState()) {
case Initializing:
switch (service.initialize()) {
case Completed:
service.setState(Service.State.Updating);
break;
case Failed:
service.setState(Service.State.Uninitializing);
break;
}
break;
case Updating:
switch (service.update()) {
case Completed:
case Failed:
service.setState(Service.State.Uninitializing);
break;
}
break;
case Uninitializing:
switch (service.uninitialize()) {
case Completed:
case Failed:
mDeadServices.put(serviceID, service);
break;
}
break;
}
}
}
}
|