     iex> MethodCaller.call b, "c", [], context
     :c
 
+  Custom method caller that calls a function
+
+    iex> alias Serverboards.MOM.RPC.MethodCaller
+    iex> {:ok, mc} = MethodCaller.start_link
+    iex> MethodCaller.add_method_caller(mc, fn msg ->
+    ...>   case msg.method do
+    ...>     "hello."<>ret -> {:ok, ret}
+    ...>     _ -> :nok
+    ...>   end
+    ...> end)
+    iex> MethodCaller.call mc, "hello.world", [], nil
+    "world"
+    iex> MethodCaller.call mc, "world.hello", [], nil
+    ** (Serverboards.MOM.RPC.UnknownMethod) Unknown method "world.hello"
+
   """
   def add_method_caller(pid, pid) do
-    raise "Cant add a method caller to itself."
+    raise Exception, "Cant add a method caller to itself."
   end
   def add_method_caller(pid, nmc) do
+    Logger.info("Add caller #{inspect nmc}")
     Agent.update pid, fn st ->
       %{ st | mc: st.mc ++ [nmc] }
     end

    iex> MethodCaller.call mc, "echo", ["test_"], context
    "test_ok"

  """
  def cast(pid, method, params, context, cb) do
    st = Agent.get pid, &(&1)
    case Map.get st.methods, method do
      {f, options} ->

  If the method does not exists, returns :nok, if it does, returns :ok.

  Callback is a function that can receive {:ok, value} or {:error, %Exception{...}}

  Alternatively mc can be a function that receies a %RPC.Message and returns any of:

  * {:ok, ret}
  * {:error, error}
  * :nok
  * :empty

  Possible errors:
   * :unknown_method
