lmw
2024-06-17 f571288a24fcf10143dcc8015ffbbf38dbc0c614
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.dollearn.student
 
import android.app.Activity
import android.app.Application
import android.os.Bundle
import cn.sinata.rxnetty.NettyClient
import cn.sinata.xldutils.application.BaseApplication
import cn.sinata.xldutils.utils.SPUtils
import com.dollearn.student.network.Apis
import com.dollearn.student.utils.Const
import com.umeng.commonsdk.UMConfigure
import com.umeng.socialize.PlatformConfig
import io.reactivex.Flowable
import io.reactivex.disposables.Disposable
import org.json.JSONObject
import java.util.concurrent.TimeUnit
 
 
class WeparkApplication :BaseApplication(), Application.ActivityLifecycleCallbacks {
    override fun getSPName() = "GWXSp"
    private var heartSubscribe: Disposable? = null
 
   private val activities = ArrayList<Activity>()
    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(this)
        //如果是主进程
//        CrashReport.initCrashReport(getApplicationContext(), "b6046fe1eb", false);
        UMConfigure.preInit(this,  Const.UMENG_KEY, "")
    }
 
    /**
     * 隐私合规
     * 三方sdk延迟加载
     * */
    fun initSdk(){
//                DownloadLibrary.init(this, resources.getIdentifier("ic_launcher", "mipmap", packageName),null, packageName)
        UMConfigure.init(this, Const.UMENG_KEY, "", UMConfigure.DEVICE_TYPE_PHONE, "")
        UMConfigure.setLogEnabled(true)
        PlatformConfig.setWeixin(Const.WX_APP_ID, Const.WX_SECRET)
        PlatformConfig.setQQZone(Const.QQ_APP_ID, Const.QQ_SECRET)
        initNetty()
    }
 
    private fun initNetty() {
        NettyClient.getInstance().init(this, Apis.SOCKET_SERVER, Apis.SOCKET_PORT, false)
        NettyClient.getInstance().addOnMessageListener { message ->
            try {
                val json = JSONObject(message)
                val method = json.optString("method")
                val code = json.optString("code")
                if (code == "200"){
                    when (method) {
                        Const.Method.PING_RECEIVE -> {//心跳
                            //延时发送心跳
                            if (heartSubscribe != null && !heartSubscribe?.isDisposed!!) {
                                heartSubscribe?.dispose()
                            }
                            heartSubscribe =
                                Flowable.just("").delay(5000, TimeUnit.MILLISECONDS).subscribe {
                                    sendHeart()
                                }
                        }
 
//                        Const.Method.OFFLINE -> {//强制下线
//                            val topAct = activities[activities.lastIndex]
//                            SPUtils.instance().remove(Const.User.TOKEN).remove(Const.User.USER_ID).remove(Const.User.NO_PHONE).apply()
//                            val tipDialog = TipDialog()
//                            tipDialog.arguments = bundleOf("msg" to "您的账号已在其他地方登陆,请重新登陆","isAlert" to true)
//                            tipDialog.setDismissCallback(object :TipDialog.OnDismiss{
//                                override fun onDismiss() {
//                                    exit()
//                                    topAct.startActivity<LoginActivity>()
//                                }
//                            })
//                            tipDialog.show((topAct as BaseActivity).supportFragmentManager,"logout")
//                        }
                    }
                }
            }catch (e: Exception){
                e.printStackTrace()
            }
        }
        NettyClient.getInstance().setOnConnectListener {
            //连接成功,发送一次心跳
            sendHeart()
        }
    }
 
    private fun sendHeart() {
        val userId = SPUtils.instance().getString(Const.User.USER_ID)
        val token = SPUtils.instance().getString(Const.User.TOKEN)
        if (token.isNotEmpty()) {
            NettyClient.getInstance()
                .sendMessage("{\"data\":{\"userId\":$userId,\"token\":\"$token\",\"type\":1},\"method\":\"PING\",\"code\":200,\"msg\":\"SUCCESS\"}")
        }
    }
 
 
    /**
     * 关闭所有页面
     */
    fun exit(){
        activities.forEach {
            it.finish()
        }
    }
 
    companion object{ //全局配置
        var lat:Double? = null
        var lon:Double? = null
        var province = "" //当前省
        var provinceCode = "" //当前省
        var cityName = "" //当前市
        var cityCode = "" //当前市
        var store = "" //门店名称
        var storeId = "" //门店id
        var avatar = "" //本人头像
 
        var appContext: WeparkApplication? = null
        fun getInstance(): WeparkApplication? {
            if (appContext == null) {
                appContext = WeparkApplication()
            }
            return appContext
        }
    }
 
    override fun onActivityPaused(p0: Activity) {
 
    }
 
    override fun onActivityStarted(p0: Activity) {
    }
 
    override fun onActivityDestroyed(p0: Activity) {
        activities.remove(p0)
    }
 
    override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
    }
 
    override fun onActivityStopped(p0: Activity) {
    }
 
    override fun onActivityCreated(p0: Activity, p1: Bundle?) {
        activities.add(p0)
    }
 
    override fun onActivityResumed(p0: Activity) {
    }
}