//Prevayler(TM) - The Free-Software Prevalence Layer.
//Copyright (C) 2004 Klaus Wuestefeld
//This is free software. It is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//See the license distributed along with this file for more details.
package org.prevayler.foundation.network;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Stubborn Network keeps reconnecting sockets should they fail.
*
* Lets UnknownHostException pass back to caller (not much can do if the
* hostname / IP Address is wrong).
*
*/
public class StubbornNetworkImpl extends BaseNetworkImpl implements StubbornNetwork {
private final Map _sessionsInService;
public StubbornNetworkImpl () {
super();
_sessionsInService = Collections.synchronizedMap(new HashMap());
}
public ObjectReceiver newReceiver(String ipAddress, int port, ObjectReceiver client) throws IOException {
return new StubbornClientReceiverImpl(this, ipAddress, port, client);
}
public ObjectReceiver newReceiver(Service service, ObjectSocket socket) throws IOException {
SessionsManager sessionsManager = getSessionManager(service);
return new StubbornServerReceiverImpl(service, socket, sessionsManager);
}
private SessionsManager getSessionManager(Service service) {
SessionsManager sessionsManager;
sessionsManager = (SessionsManager) _sessionsInService.get(service);
if (sessionsManager == null) {
sessionsManager = new SessionsManagerImpl();
_sessionsInService.put(service, sessionsManager);
}
return sessionsManager;
}
public ObjectSocket newInstance(String ipAddress, int port) throws IOException {
return new ObjectSocketImpl(ipAddress, port);
}
}