Created
December 26, 2017 21:55
-
-
Save jirevwe/0cbbe216f29df47f46d7595657bef4e1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ng.smartalumni.smartsocket; | |
import android.os.Handler; | |
import android.os.Looper; | |
import android.support.annotation.NonNull; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
import java.net.URISyntaxException; | |
import io.socket.client.IO; | |
import io.socket.client.Socket; | |
import io.socket.emitter.Emitter; | |
public final class SmartSocket { | |
/** | |
* Socket Listeners ids | |
*/ | |
private static final String NEW_USER_TO_SERVER = "new_user_to_server"; | |
private static final String ON_NEW_USER_TO_CLIENT = "new_user_to_client"; | |
private static final String ENTER_ROOM_TO_SERVER = "enter_room_to_server"; | |
private static final String MESSAGE_TO_SERVER = "message_to_server"; | |
private static final String MESSAGE_TO_CLIENT = "message_to_client"; | |
private static Handler uiThreadHandler = null; | |
private static Handler socketConnectHandler = null; | |
private static Socket socketInternal; | |
private static ChatRoomHandler chatRoomHandler; | |
/** | |
* CUSTOM EVENT DEFINITIONS | |
*/ | |
private static Emitter.Listener onConnected = new Emitter.Listener() { | |
@Override | |
public void call(final Object... args) { | |
runOnUIThread(new Runnable() { | |
@Override | |
public void run() { | |
if (chatRoomHandler != null) chatRoomHandler.onConnected("Connected"); | |
} | |
}); | |
} | |
}; | |
private static Emitter.Listener onGetMessageToClient = new Emitter.Listener() { | |
@Override | |
public void call(final Object... args) { | |
runOnUIThread(new Runnable() { | |
@Override | |
public void run() { | |
JSONObject data = (JSONObject) args[0]; | |
if (chatRoomHandler != null) chatRoomHandler.onMessageReceived(data); | |
} | |
}); | |
} | |
}; | |
private static Emitter.Listener onNewUserToClient = new Emitter.Listener() { | |
@Override | |
public void call(final Object... args) { | |
runOnUIThread(new Runnable() { | |
@Override | |
public void run() { | |
JSONObject data = (JSONObject) args[0]; | |
if (chatRoomHandler != null) chatRoomHandler.onUserJoinServer(data); | |
} | |
}); | |
} | |
}; | |
private static final Runnable runnable = new Runnable() { | |
@Override | |
public void run() { | |
if (!socketInternal.connected()) { | |
socketInternal.off(Socket.EVENT_CONNECT, onConnected); | |
socketInternal.off(ON_NEW_USER_TO_CLIENT, onNewUserToClient); | |
socketInternal.off(MESSAGE_TO_CLIENT, onGetMessageToClient); | |
connect(); | |
} | |
} | |
}; | |
static { | |
uiThreadHandler = new Handler(Looper.getMainLooper()); | |
socketConnectHandler = new Handler(Looper.getMainLooper()); | |
} | |
private SmartSocket(String url) { | |
try { | |
socketInternal = IO.socket(url); | |
} catch (URISyntaxException e) { | |
} | |
} | |
public static Socket getSocket() { | |
return socketInternal; | |
} | |
public static void setChatRoomHandler(ChatRoomHandler handler) { | |
chatRoomHandler = handler; | |
} | |
public static SmartSocket initialize(String url) { | |
return new SmartSocket(url); | |
} | |
private static void runOnUIThread(Runnable runnable) { | |
if (uiThreadHandler != null) { | |
uiThreadHandler.post(runnable); | |
} else { | |
runnable.run(); | |
} | |
} | |
public static void createServerConnection(@NonNull final String id, @NonNull final Object user) { | |
if (socketInternal.connected()) { | |
try { | |
JSONObject data = new JSONObject(); | |
data.put("user", user); | |
data.put("school_id", id); | |
socketInternal.emit(NEW_USER_TO_SERVER, data); | |
} catch (JSONException e) { | |
} | |
} else { | |
if (chatRoomHandler != null) | |
chatRoomHandler.onSocketError("SOCKET STATE IS" + socketInternal.connected()); | |
} | |
} | |
public static void connect() { | |
socketInternal.connect(); | |
socketInternal.on(Socket.EVENT_CONNECT, onConnected); | |
socketInternal.on(ON_NEW_USER_TO_CLIENT, onNewUserToClient); | |
socketInternal.on(MESSAGE_TO_CLIENT, onGetMessageToClient); | |
socketConnectHandler.postDelayed(runnable, 3000); | |
} | |
public static void joinRoom(String user_id, String room_id) { | |
if (socketInternal.connected()) { | |
try { | |
JSONObject data = new JSONObject(); | |
data.put("user_id", user_id); | |
data.put("room_id", room_id); | |
socketInternal.emit(ENTER_ROOM_TO_SERVER, data); | |
} catch (JSONException e) { | |
} | |
} else { | |
if (chatRoomHandler != null) | |
chatRoomHandler.onSocketError("SOCKET STATE IS" + socketInternal.connected()); | |
} | |
} | |
public static void sendMessage(String room_id, JSONObject message) { | |
try { | |
JSONObject data = new JSONObject(); | |
data.put("room_id", room_id); | |
data.put("message", message); | |
socketInternal.emit(MESSAGE_TO_SERVER, data); | |
} catch (JSONException e) { | |
} | |
} | |
public static void disconnect() { | |
socketInternal.disconnect(); | |
if (chatRoomHandler != null) { | |
chatRoomHandler.onDisconnected("Disconnected"); | |
chatRoomHandler = null; | |
} | |
socketInternal.off(Socket.EVENT_CONNECT, onConnected); | |
socketInternal.off(ON_NEW_USER_TO_CLIENT, onNewUserToClient); | |
socketInternal.off(MESSAGE_TO_CLIENT, onGetMessageToClient); | |
} | |
public interface ChatRoomHandler { | |
void onDisconnected(String data); | |
void onConnected(String data); | |
void onMessageReceived(JSONObject data); | |
void onUserJoinServer(JSONObject data); | |
void onSocketError(String error); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment