package com.workshare.msnos.core;
import static com.workshare.msnos.core.CoreHelper.synchronousGatewayMulticaster;
import static org.mockito.Mockito.*;
import java.net.MulticastSocket;
import java.util.concurrent.ScheduledExecutorService;
import org.apache.http.client.HttpClient;
import com.workshare.msnos.core.Gateway.Listener;
import com.workshare.msnos.core.protocols.ip.MulticastSocketFactory;
import com.workshare.msnos.core.protocols.ip.http.HttpGateway;
import com.workshare.msnos.core.protocols.ip.udp.UDPGateway;
import com.workshare.msnos.core.protocols.ip.udp.UDPServer;
import com.workshare.msnos.core.protocols.ip.www.HttpClientHelper;
import com.workshare.msnos.core.protocols.ip.www.WWWGateway;
import com.workshare.msnos.core.serializers.WireJsonSerializer;
import com.workshare.msnos.soup.threading.Multicaster;
public class GatewaysHelper {
private static HttpClient httpClient;
private GatewaysHelper() {
}
private static HttpClient httpClient() {
try {
if (httpClient == null)
httpClient = new HttpClientHelper().client();
} catch (Exception e) {
throw new RuntimeException("wtf?");
}
return httpClient;
}
public static HttpGateway newHttpGateway() throws Exception {
return new HttpGateway(httpClient());
}
public static UDPGateway newUDPGateway() throws Exception {
Multicaster<Listener, Message> caster = synchronousGatewayMulticaster();
MulticastSocketFactory sockets = mock(MulticastSocketFactory.class);
MulticastSocket msock = mock(MulticastSocket.class);
when(sockets.create()).thenReturn(msock);
return new UDPGateway(sockets, mock(UDPServer.class), caster);
}
public static WWWGateway newWWWGateway() throws Exception {
Multicaster<Listener, Message> caster = synchronousGatewayMulticaster();
return new WWWGateway(httpClient(), mock(ScheduledExecutorService.class), new WireJsonSerializer(), caster);
}
}