package org.limewire.lws.server;
import java.io.IOException;
import java.util.Map;
/**
* Defines an interface to communicate with a remote server. The location is
* inedpendent of the implementation of the method
* {@link #sendMessageToServer(String, Map)}. The reason that this method takes
* a {@link String} and {@link Map<String,String>} instead of a single
* {@link String} is because different remote servers take arguments
* differently. For example a normal CGI implemention would encode arguments
* with a <code>?</code> and series of <code>&</code>s; where as <a
* href="http://wicket.apache.org/">Wicket</a> uses just <code>/</code>s.
* <p>
* This is used in this component to construct a {@link LWSDispatcherImpl},
* because after receiving a message to start communication it needs to send two
* keys to a remote server.
*/
public interface LWSSenderOfMessagesToServer {
/**
* Sends the response after sending a message <code>msg</code> and
* name/value pair arguments <code>args</code> to <code>callback</code>.
*
* @param msg the command upon which to act
* @param args name/value pair of arguments to send
* @param callback put the result of sending this message to
* <code>callback</code>'s {@link StringCallback#process(String)}
* method, so this is non-blocking
* @throws IOException when something happens to the connection or another
* IO program occurs
*/
void sendMessageToServer(String msg, Map<String, String> args, StringCallback callback)
throws IOException;
}