Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Features/android js develop #438

Merged
merged 28 commits into from
Sep 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
542eb1d
[add]:Demo中增加JS入口
msliu3 Jan 31, 2023
cf2e6ef
[add]:DevTools悬浮窗 UI
msliu3 Feb 2, 2023
42fa679
[add]:DevTools悬浮窗 (尝试获取扫码结果)
msliu3 Feb 2, 2023
f717f31
[add]:DevTools悬浮窗 (获取扫码结果final)
msliu3 Feb 2, 2023
246d1cd
[add]:扫码三合一通信模式
msliu3 Feb 7, 2023
2b750ba
[add]:扫码三合一通信模式(功能实现)
msliu3 Feb 20, 2023
373e7d6
[add]:GaiaXJS addEventListener(done)
msliu3 Mar 8, 2023
c394fe7
[add]:GaiaXJS Debug模式(finished)
msliu3 Mar 21, 2023
b350b99
[add]:DevTools 代码整理(todo:断开连接,关闭DevTools)
msliu3 Mar 21, 2023
4374188
[add]:GaiaXJS 代码整理(todo:internal可见性)
msliu3 Mar 22, 2023
8c29e23
[add]:GaiaXJS完整版
msliu3 Mar 24, 2023
05a912f
[add]:修改了模块名
msliu3 Mar 24, 2023
0c8283d
[add]:GaiaXJS结构调整
msliu3 Mar 27, 2023
e1e2271
Merge remote-tracking branch 'origin/main' into features/android_js_d…
msliu3 Mar 27, 2023
364fbbe
[add]:合并主工程
msliu3 Mar 27, 2023
5e3d4cd
[add]:结构化拆分 对外提供GXJSEngineFactory和GXJSComponentDelegate
msliu3 Mar 28, 2023
dd19ca8
[add]:优化JSEngine创建逻辑(一个类型只允许创建一次)
msliu3 Mar 29, 2023
d581511
[add]:引入GaiaXAndroidJSAdapter解决GaiaXJS和GaiaX渲染引擎的初始化
msliu3 Mar 29, 2023
5b1f9f0
[add]:注释优化
msliu3 Mar 30, 2023
753153b
[fix]:修复JSTimer中clearInterval失效的问题。JS使用中,当setInterval的箭头函数中直接调用clearI…
msliu3 Jun 2, 2023
7a2e5d9
[add]:更新了示例代码,js源码放在/gaiax_js_code路径下 notes:源码不能直接使用,需要通过studio输出产生in…
msliu3 Jul 27, 2023
39027b0
[add]:添加了原生按钮示例为demo发送消息
msliu3 Jul 27, 2023
111613d
[add]:暴露了原生发送JS消息的方法,notes:注意定义的数据协议userData和type必须保持一致
msliu3 Jul 27, 2023
d5d48aa
add reconnect
Sep 22, 2023
fd69276
add reconnect function
cofbro Sep 22, 2023
cbdbabe
add reconnect funciton
cofbro Sep 22, 2023
e844f01
add reconnect function
cofbro Sep 22, 2023
ca24675
fix conflicts
biezhihua Sep 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .gradle/6.7.1/fileChanges/last-build.bin
Binary file not shown.
Binary file added .gradle/6.7.1/fileHashes/fileHashes.lock
Binary file not shown.
Empty file added .gradle/6.7.1/gc.properties
Empty file.
Binary file added .gradle/checksums/checksums.lock
Binary file not shown.
Empty file.
Empty file added .gradle/vcs-1/gc.properties
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,32 @@ import java.io.UnsupportedEncodingException
import java.net.URLDecoder
import java.util.regex.Pattern

class GXClientToStudio {

/**
* @author: shisan.lms
* @date: 2023-02-02
* Description: Studio扫码三合一通道
*/
class GXClientToStudioMultiType {
interface GXSocketToStudioListener {
fun onAddData(templateId: String, templateData: JSONObject)
fun onUpdate(templateId: String, templateData: JSONObject)
}

interface GXSocketJSReceiveListener {
fun onCallSyncFromStudioWorker(socketId: Int, params: JSONObject)

fun onCallAsyncFromStudioWorker(socketId: Int, params: JSONObject)

fun onCallPromiseFromStudioWorker(socketId: Int, params: JSONObject)

fun onCallGetLibraryFromStudioWorker(socketId: Int, methodName: String)
}

var applicationContext: Context? = null

var gxSocketToStudioListener: GXSocketToStudioListener? = null


private var socketHelper: GXSocket? = null
private var currentAddress: String? = null
private var currentTemplateId: String? = null
Expand All @@ -29,21 +44,26 @@ class GXClientToStudio {
private val gxSocketListener: GXSocket.GXSocketListener = object : GXSocket.GXSocketListener {

override fun onSocketConnected() {
sendInitMsg(currentType)
sendInitMsg()

}

override fun onSocketDisconnected() {
if (isWaitDisconnectMsgThenConnectGaiaStudio) {
//ip改变时的断开重连
isWaitDisconnectMsgThenConnectGaiaStudio = false
toConnectGaiaStudio()
}
socketHelper?.devTools?.changeDevToolsConnectedStateView()
}

override fun onStudioConnected() {

Log.d(TAG, "onStudioConnected() called currentTemplateId = $currentTemplateId")
if (currentTemplateId != null) {
socketHelper?.sendGetTemplateData103(currentTemplateId)
socketHelper?.sendGetTemplateData(currentTemplateId)
}
socketHelper?.devTools?.changeDevToolsConnectedStateView()
}

override fun onStudioAddData(templateId: String, templateData: JSONObject) {
Expand All @@ -67,7 +87,7 @@ class GXClientToStudio {
socketHelper = null
}

fun manualConnect(context: Context, params: JSONObject) {
fun manualConnect1(context: Context, params: JSONObject) {
if (isConnectVpn(context)) {
Log.e(TAG, "manualConnect: 请断开手机VPN后重试")
return
Expand All @@ -90,6 +110,17 @@ class GXClientToStudio {
tryToConnectGaiaStudio(targetUrl, templateId, type)
}

fun manualConnect(context: Context, params: JSONObject) {
if (isConnectVpn(context)) {
Log.e(TAG, "manualConnect: 请断开手机VPN后重试")
return
}
Log.e(TAG, "onlyConnect() called with: params = [$params]")
val targetUrl = params.getString("URL")
val type = params.getString("TYPE")
tryToConnectGaiaStudio(targetUrl, null, type)
}

fun getParams(url: String?): JSONObject? {
if (url == null || TextUtils.isEmpty(url)) {
return null
Expand All @@ -107,12 +138,12 @@ class GXClientToStudio {
if (matcher.find()) {
//局域网下IP
val targetUrl = matcher.group()
val templateId = parseTemplateId(finalUrl)
// val templateId = parseTemplateId(finalUrl)
val type = parseConnectType(finalUrl)
val result = JSONObject()
result["URL"] = targetUrl
result["TYPE"] = type
result["TEMPLATE_ID"] = templateId
// result["TEMPLATE_ID"] = templateId
Log.e(TAG, "getParams() called with: result = [$result]")
return result
} else {
Expand All @@ -121,16 +152,16 @@ class GXClientToStudio {
return null
}

private fun parseConnectType(url: String): String {
try {
return url.split("&".toRegex()).toTypedArray()[2].split("=".toRegex()).toTypedArray()[1]
} catch (e: Exception) {
e.printStackTrace()
}
return ""
}
// private fun parseConnectType(url: String): String {
// try {
// return url.split("&".toRegex()).toTypedArray()[2].split("=".toRegex()).toTypedArray()[1]
// } catch (e: Exception) {
// e.printStackTrace()
// }
// return ""
// }

private fun parseTemplateId(url: String): String {
private fun parseConnectType(url: String): String {
try {
return url.split("&".toRegex()).toTypedArray()[1].split("=".toRegex()).toTypedArray()[1]
} catch (e: Exception) {
Expand All @@ -152,10 +183,7 @@ class GXClientToStudio {
}

private fun tryToConnectGaiaStudio(address: String, templateId: String?, type: String) {
Log.e(
TAG,
"tryToConnectGaiaStudio() called with: address = [$address], templateId = [$templateId], type = [$type]"
)
Log.e(TAG, "tryToConnectGaiaStudio() called with: address = [$address], templateId = [$templateId], type = [$type]")
val tmpAddress = currentAddress
currentType = type
currentAddress = address
Expand All @@ -175,28 +203,74 @@ class GXClientToStudio {
socketHelper?.gxSocketListener = gxSocketListener
socketHelper?.connectToServer(currentAddress)
} else {
sendInitMsg(currentType)
sendInitMsg()
}
}

private fun sendInitMsg(type: String) {
if (socketHelper?.isManualPush(type) == true) {
socketHelper?.sendMsgWithManualPushInit()
} else if (socketHelper?.isFastPreview(type) == true) {
socketHelper?.sendMsgWithFastPreviewInit()
}
private fun sendInitMsg() {
socketHelper?.sendMsgWithMultiTypeInit()
}

fun sendMessage(data: JSONObject) {
socketHelper?.sendMessage(data)
}


fun sendMsgForObtainMode() {
Log.d(GXSocket.TAG, "sendMsgForObtainMode() called ")
val data = JSONObject()
data["jsonrpc"] = "2.0"
data["method"] = "mode/get"
data["id"] = 302
socketHelper?.sendMessage(data)
}

fun sendMsgForDisconnect() {
val data = JSONObject()
data["jsonrpc"] = "2.0"
data["method"] = "close"
socketHelper?.sendMessage(data)
}

fun sendMsgForGetTemplateData(templateId: String?) {
socketHelper?.sendGetTemplateData(templateId)
}

fun sendMsgForJSLog(logLevel: String, logContent: String) {
val data = JSONObject()
data["jsonrpc"] = "2.0"
data["method"] = "js/console"
val params = JSONObject()
params["level"] = logLevel
params["data"] = logContent
data["params"] = params
socketHelper?.sendMessage(data)
}

fun setDevTools(dev: IDevTools) {
socketHelper?.devTools = dev
}

fun setJSReceiverListener(listener: GXSocketJSReceiveListener) {
socketHelper?.gxSocketJSReceiveListener = listener
}

fun isGaiaStudioConnected(): Boolean? {
return socketHelper?.gxSocketIsConnected
}

companion object {
const val TAG = "[GaiaX][GXStudio]"
const val TAG = "[GXStudioMulti]"

const val PREVIEW_AUTO = "auto"
const val PREVIEW_MANUAL = "manual"
const val PREVIEW_NONE = "none"

const val JS_DEFAULT = "default"
const val JS_BREAKPOINT = "breakpoint"

val instance by lazy {
GXClientToStudio()
GXClientToStudioMultiType()
}
}

}
Loading
Loading