1

I am trying to have chat in my application using Phoenix channels. I have a web client and and an Android client. Right now it is working correctly on the web. I am having an issue with the Android side.

It is able to receive messages pushed to the channel, but it wont send any out. When I try to push a message I get the following exceptions thrown:

java.net.SocketTimeoutException: timeout exception

java.lang.IllegalStateException: Another message writer is active. Did you call close()?

My chat channel

defmodule GoodApi2.ChatChannel do
 use Phoenix.Channel

 intercept(["chat_send"])

 def join("chat:"<> _room_code, _message, socket) do
     {:ok, socket}
 end

 def handle_in("chat_send", message, socket) do
     broadcast! socket, "chat_send", message
     {:noreply, socket}
 end

 def handle_out("chat_send", payload, socket) do
     push socket, "new_message", payload
     {:noreply, socket}
 end
end

On the Android app creating the channel

try{
socket = new Socket("ws:"+ApiUtils.BASE.toString()+"socket/websocket");
        socket.connect();
        channel = socket.chan("chat:"+chatName, null);

        channel.join()
                .receive("ok", new IMessageCallback() {
                    @Override
                    public void onMessage(Envelope envelope) {
                        System.out.println("IGNORE");
                    }
                });
      }
      catch (IOException e) {
        System.out.println("error connecting to chat");
        e.printStackTrace();
     }

On the Android app pushing to the channel

public void sendMessage(final String message){
 ObjectNode node = new ObjectNode(JsonNodeFactory.instance)
                        .put("sender", email)
                        .put("sender_name", userName)
                        .put("content", message);


  try{
        channel.push("chat_send", node);
       }
  catch (Exception e){
         Log.e("message failed to send",  message);
        }    
 }
Justin Wood
  • 9,941
  • 2
  • 33
  • 46
Phil DiMarco
  • 51
  • 2
  • 7

0 Answers0