public String getSource() {
		StringBuilder sb = new StringBuilder();
		sb.append(String.format("/*" +
							  "\n * Dynamically created source via interfaces.client.generate.Functions for remote client to server at %s:%s" +
							  "\n * Date: %s" +
				              "\n */\n", host, port, new Date()));
		sb.append("package interfaces.client.generate;\n");
		sb.append("import interfaces.client.RemoteClient;\n");
		sb.append("import java.util.Set;\n");

		sb.append("public class Functions_").append(host).append("_").append(port).append(" {\n");

		sb.append("\tprivate static final RemoteClient remoteClient = new RemoteClient(\"").append(host).append("\",").append(port).append(");\n");

		for (Function function : new RemoteClient(host, port).getAvailableFunctions()) {
			String returnType = function.getReturnType().getSimpleName();
			String functionName = function.getName();
			sb.append("\tpublic static ").append(returnType).append(" ").append(functionName)
					.append("(");
			int i = 0;
			for (Class<?> param : function.getParameterTypes()) {
				sb.append(param.getSimpleName()).append(" param").append(i++).append(",");
			}

			if (function.getParameterTypes().length > 0) {
				sb.deleteCharAt(sb.length() - 1);
			}
			sb.append("){\n");

			sb.append("\t\t");
			if (!function.getReturnType().getSimpleName().equals("void")) {
				sb.append("return ");
			}
			sb.append("remoteClient.call(").append(returnType).append(".class, \"").append(functionName).append("\"");
			for (i = 0; i < function.getParameterTypes().length; i++) {
				sb.append(", param").append(i);
			}
			sb.append(");\n");
			sb.append("\t}\n");

		}


		return sb.append("}").toString();
	}