Dola TENG hai 1 ano
pai
achega
d55e25adf3

+ 1 - 0
.idea/gradle.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>

+ 1 - 1
.idea/misc.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 26 - 0
app/build.gradle

@@ -48,4 +48,30 @@ dependencies {
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.5'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+
+    //RxJava & RxAndroid
+    implementation "io.reactivex.rxjava2:rxjava:2.2.18"
+    implementation "io.reactivex.rxjava2:rxkotlin:2.4.0"
+    implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
+
+    //Retrofit
+    def retrofit_version = "2.9.0"
+    implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
+    implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit_version"
+    implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
+    implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2'
+    implementation 'com.localebro:okhttpprofiler:1.0.8'
+
+    /*Json Serialize & Deserialize Library*/
+    implementation("com.squareup.moshi:moshi-kotlin:1.9.2")
+    implementation("com.squareup.moshi:moshi-kotlin-codegen:1.9.2")
+
+    //Socket io client
+    implementation('io.socket:socket.io-client:2.0.0') {
+        exclude group: 'org.json', module: 'json'
+    }
+
+    //Logging helper
+    implementation 'com.jakewharton.timber:timber:4.7.1'
+    implementation 'com.google.code.gson:gson:2.8.6'
 }

+ 95 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/LoginDataModel.kt

@@ -0,0 +1,95 @@
+//package com.khmer9.boxingapplication.remote
+//
+//import com.squareup.moshi.Json
+//import com.squareup.moshi.JsonClass
+//
+//@JsonClass(generateAdapter = true)
+//class LoginRequest(
+//    @Json(name = "user_name")
+//    val username: String,
+//
+//    @Json(name = "password")
+//    val password: String,
+//
+//    @Json(name = "app_id")
+//    val appId: String? = "630475c2eca0ac8bd61e7e58"
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class LoginResponse(
+//    @Json(name = "code")
+//    val resultCode: String,
+//
+//    @Json(name = "message")
+//    val message: LoginMessage,
+//
+//    @Json(name = "data")
+//    val data: LoginData?
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class LoginMessage(
+//    @Json(name = "code")
+//    val code: String,
+//
+//    @Json(name = "descriptions")
+//    val description: String,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class LoginData(
+//    @Json(name = "user")
+//    val user: User?,
+//
+//    @Json(name = "token")
+//    val token: String?,
+//)
+//
+///////////////////
+//@JsonClass(generateAdapter = true)
+//data class UserResponse(
+//    @Json(name = "code")
+//    val resultCode: String,
+//
+//    @Json(name = "message")
+//    val message: LoginMessage,
+//
+//    @Json(name = "data")
+//    val data: User?
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class User(
+//    @Json(name = "user_name")
+//    val userName: String,
+//
+//    @Json(name = "role")
+//    val role: String,
+//
+//    @Json(name = "enable")
+//    val enable: Boolean,
+//
+//    @Json(name = "is_suspend")
+//    val isSuspend: Boolean,
+//
+//    @Json(name = "account_info")
+//    val accountInfo: String,
+//
+//    @Json(name = "account_name")
+//    val accountName: String?,
+//
+//    @Json(name = "account_number")
+//    val accountNumber: String?,
+//
+//    @Json(name = "balance")
+//    val accountBalances: Double,
+//
+//    @Json(name = "currency_type")
+//    val currencyType: Int,
+//
+//    @Json(name = "amount_min")
+//    val amountMin: Int? = 0,
+//
+//    @Json(name = "amount_max")
+//    val amountMax: Int? = 0,
+//)

+ 13 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/main/SocketClientNewGameDataModel.kt

@@ -0,0 +1,13 @@
+//package com.khmer9.boxingapplication.remote.main
+//
+//import com.squareup.moshi.Json
+//import com.squareup.moshi.JsonClass
+//
+//@JsonClass(generateAdapter = true)
+//data class SocketClientNewGameDataModel(
+//    @Json(name = "no")
+//    val no: Int,
+//
+//    @Json(name = "date")
+//    val date: String
+//)

+ 13 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/main/SocketClientRandomDataModel.kt

@@ -0,0 +1,13 @@
+//package com.khmer9.boxingapplication.remote.main
+//
+//import com.squareup.moshi.Json
+//import com.squareup.moshi.JsonClass
+//
+//@JsonClass(generateAdapter = true)
+//data class SocketClientRandomDataModel(
+//    @Json(name = "randmon_time")
+//    val randomTime: Int? = null,
+//
+//    @Json(name = "is_open")
+//    val isOpen: Boolean
+//)

+ 133 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/main/SocketClientResultDataModel.kt

@@ -0,0 +1,133 @@
+//package com.khmer9.boxingapplication.remote.main
+//
+//import com.squareup.moshi.Json
+//import com.squareup.moshi.JsonClass
+//
+//@JsonClass(generateAdapter = true)
+//data class SocketClientResultDataModel(
+//    @Json(name = "_id")
+//    val id: String,
+//
+//    @Json(name = "no")
+//    val no: Int,
+//
+//    @Json(name = "bonus_between_year")
+//    val bonusBetweenYear: BonusBetweenYear,
+//
+//    @Json(name = "between_year")
+//    val betweenYear: BetweenYear,
+//
+//    @Json(name = "small_large")
+//    val smallLarge: SmallLarge,
+//
+//    @Json(name = "range")
+//    val range: Range,
+//
+//    @Json(name = "blue_red")
+//    val blueRed: BlueRed,
+//
+//    @Json(name = "odd_even")
+//    val oddEven: OddEven,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class BonusBetweenYear(
+//    @Json(name = "is_bonus")
+//    val isBonus: Boolean,
+//
+//    @Json(name = "payout")
+//    val payout: Double,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: Int,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class BetweenYear(
+//    @Json(name = "year_name_kh")
+//    val yearNameKh: String,
+//
+//    @Json(name = "year_name_vn")
+//    val yearNameVn: String,
+//
+//    @Json(name = "year_name_tb")
+//    val yearNameTb: String,
+//
+//    @Json(name = "year_name_en")
+//    val yearNameEn: String,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: Int,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class SmallLarge(
+//    @Json(name = "year_name_kh")
+//    val yearNameKh: String,
+//
+//    @Json(name = "year_name_vn")
+//    val yearNameVn: String,
+//
+//    @Json(name = "year_name_tb")
+//    val yearNameTb: String,
+//
+//    @Json(name = "year_name_en")
+//    val yearNameEn: String,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: String,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class Range(
+//    @Json(name = "year_name_kh")
+//    val yearNameKh: String,
+//
+//    @Json(name = "year_name_vn")
+//    val yearNameVn: String,
+//
+//    @Json(name = "year_name_tb")
+//    val yearNameTb: String,
+//
+//    @Json(name = "year_name_en")
+//    val yearNameEn: String,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: String,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class BlueRed(
+//    @Json(name = "year_name_kh")
+//    val yearNameKh: String,
+//
+//    @Json(name = "year_name_vn")
+//    val yearNameVn: String,
+//
+//    @Json(name = "year_name_tb")
+//    val yearNameTb: String,
+//
+//    @Json(name = "year_name_en")
+//    val yearNameEn: String,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: String,
+//)
+//
+//@JsonClass(generateAdapter = true)
+//data class OddEven(
+//    @Json(name = "year_name_kh")
+//    val yearNameKh: String,
+//
+//    @Json(name = "year_name_vn")
+//    val yearNameVn: String,
+//
+//    @Json(name = "year_name_tb")
+//    val yearNameTb: String,
+//
+//    @Json(name = "year_name_en")
+//    val yearNameEn: String,
+//
+//    @Json(name = "year_number")
+//    val yearNumber: String,
+//)

+ 18 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/main/SocketClientTimeDataModel.kt

@@ -0,0 +1,18 @@
+//package com.khmer9.boxingapplication.remote.main
+//
+//import com.squareup.moshi.Json
+//import com.squareup.moshi.JsonClass
+//
+//@JsonClass(generateAdapter = true)
+//data class SocketClientTimeDataModel(
+//    @Json(name = "time")
+//    val time: Int,
+//
+//    @Json(name = "is_open_betting")
+//    val isOpenBetting: Boolean,
+//
+//    @Json(name = "is_countdown")
+//    val isCountdown: Boolean
+//) {
+//    fun isCountDowning() = time != 0
+//}

+ 11 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/service/ApiService.kt

@@ -0,0 +1,11 @@
+//package com.khmer9.boxingapplication.service
+//
+//import com.khmer9.yuki_wa855.remote.*
+//import io.reactivex.Single
+//import retrofit2.http.*
+//
+//interface ApiService {
+//    @POST("/yuki/v1/api/user/login")
+//    @Headers("No-Authentication: true")
+//    fun login(@Body loginRequest: LoginRequest): Single<LoginResponse>
+//}

+ 19 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/service/ConnectivityStates.java

@@ -0,0 +1,19 @@
+package com.khmer9.boxingapplication.remote.service;
+
+public class ConnectivityStates {
+
+    private ConnectivityStates() {
+        // non-instantiable class
+    }
+
+    public static final int STATE_NOT_CONNECTED = 0 ;
+
+    public static final int STATE_RECONNECTING = 1 ;
+
+    public static final int STATE_CONNECTED = 2 ;
+
+    public static final int STATE_DISCONNECTED = 3 ;
+
+    public static final int STATE_TIMEOUT = 4 ;
+
+}

+ 25 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/service/EventListener.java

@@ -0,0 +1,25 @@
+package com.khmer9.boxingapplication.remote.service;
+
+public interface EventListener {
+    void onConnect();
+
+    void onConnectionError();
+
+    void onDisconnect();
+
+    void onClientNewGameListener(String data);
+
+    void onClientRandomListener(String data);
+
+    void onClientResetListener(String data);
+
+    void onClientResultListener(String data);
+
+    void onClientUpdateInfoListener(String data);
+
+    void onClientTimeListener(String data);
+
+    void onReconnect();
+
+    void onReconnectionTimeout();
+}

+ 130 - 0
app/src/main/java/com/khmer9/boxingapplication/remote/service/SocketService.java

@@ -0,0 +1,130 @@
+//package com.khmer9.boxingapplication.remote.service;
+//
+//import static java.util.Collections.singletonList;
+//import static java.util.Collections.singletonMap;
+//
+//import android.util.Log;
+//
+//import com.khmer9.boxingapplication.config.Config;
+//import com.khmer9.boxingapplication.util.BaseObservable;
+//
+//import org.json.JSONObject;
+//
+//import java.net.URI;
+//import java.net.URISyntaxException;
+//
+//import io.socket.client.IO;
+//import io.socket.client.Socket;
+//import io.socket.emitter.Emitter;
+//
+//public class SocketService extends BaseObservable<EventListener> {
+//
+//    private static final String TAG = "Socket";
+//
+//    private static final String SOCKET_URL = Config.SOCKET_URL;
+//
+//    private static final String EVENT_CONNECT = Socket.EVENT_CONNECT;
+//    private static final String EVENT_CONNECT_ERROR = Socket.EVENT_CONNECT_ERROR;
+//    private static final String EVENT_DISCONNECT = Socket.EVENT_DISCONNECT;
+//
+//    private static final String EVENT_CLIENT_NEW_GAME = "client-new-game";
+//    private static final String EVENT_CLIENT_RANDOM = "client-random";
+//    private static final String EVENT_CLIENT_RESET = "client-reset";
+//    private static final String EVENT_CLIENT_RESULT = "client-result";
+//    private static final String EVENT_CLIENT_UPDATE_INFO = "client-update-info";
+//    private static final String EVENT_CLIENT_TIME = "client-time";
+//
+//    private Socket socket;
+//
+//    public void startListening(String token) throws URISyntaxException {
+//        IO.Options options = IO.Options.builder()
+//                .setExtraHeaders(singletonMap("Authorization", singletonList("Bearer " + token)))
+//                .build();
+//
+//        if (socket == null) {
+//            socket = IO.socket(URI.create(SOCKET_URL), options);
+//        }
+//
+//        socket.on(EVENT_CONNECT, connectListener);
+//        socket.on(EVENT_CLIENT_NEW_GAME, clientNewGameListener);
+//        socket.on(EVENT_CLIENT_RANDOM, clientRandomListener);
+//        socket.on(EVENT_CLIENT_RESET, clientResetListener);
+//        socket.on(EVENT_CLIENT_RESULT, clientResultListener);
+//        socket.on(EVENT_CLIENT_UPDATE_INFO, clientUpdateInfoListener);
+//        socket.on(EVENT_CLIENT_TIME, clientTimeListener);
+//        socket.on(EVENT_DISCONNECT, disconnectListener);
+//        socket.on(EVENT_CONNECT_ERROR, connectionErrorListener);
+//        socket.connect();
+//    }
+//
+//    private Emitter.Listener clientNewGameListener = args -> {
+//        Log.d("Socket", "clientNewGameListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientNewGameListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener clientRandomListener = args -> {
+//        Log.d("Socket", "clientRandomListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientRandomListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener clientResetListener = args -> {
+//        Log.d("Socket", "clientResetListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientResetListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener clientResultListener = args -> {
+//        Log.d("Socket", "clientResultListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientResultListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener clientUpdateInfoListener = args -> {
+//        Log.d("Socket", "clientUpdateInfoListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientUpdateInfoListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener clientTimeListener = args -> {
+//        Log.d("Socket", "clientTimeListener s...");
+//        final String rawMessage = args[0].toString();
+//        for (EventListener listener : getListeners())
+//            listener.onClientTimeListener(rawMessage);
+//    };
+//
+//    private Emitter.Listener connectListener = args -> {
+//        Log.d("Socket", "onConnect s...");
+//        for (EventListener listener : getListeners())
+//            listener.onConnect();
+//    };
+//
+//    private Emitter.Listener connectionErrorListener = args -> {
+//        Log.d(TAG, "onConnectionError s..." + args[0].toString());
+//        for (EventListener listener : getListeners())
+//            listener.onConnectionError();
+//    };
+//
+//    private Emitter.Listener disconnectListener = args -> {
+//        Log.d(TAG, "onDisconnect s..." + args[0].toString());
+//        socket.off();
+//        for (EventListener listener : getListeners()) {
+//            listener.onDisconnect();
+//        }
+//    };
+//
+//    public void startEmitCfCreateBetting(JSONObject joinObject) {
+//        socket.emit("player-betting", joinObject);
+//    }
+//
+//    public void stopListening() {
+//        if (socket != null)
+//            socket.disconnect();
+//    }
+//}