Commit f848c1da authored by 马乐's avatar 马乐

1.注册初步验证OK

2.鉴权初步验证OK 3.心跳OK
parent 02a36148
...@@ -3,7 +3,9 @@ ...@@ -3,7 +3,9 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:name=".MyApp"
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules" android:fullBackupContent="@xml/backup_rules"
...@@ -11,6 +13,7 @@ ...@@ -11,6 +13,7 @@
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.HTAnticollision" android:theme="@style/Theme.HTAnticollision"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
......
...@@ -8,7 +8,11 @@ import androidx.navigation.ui.setupWithNavController ...@@ -8,7 +8,11 @@ import androidx.navigation.ui.setupWithNavController
import com.blankj.utilcode.util.Utils import com.blankj.utilcode.util.Utils
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.waytous.anticollision.config.DeviceConfig
import com.waytous.anticollision.databinding.ActivityMainBinding import com.waytous.anticollision.databinding.ActivityMainBinding
import com.waytous.anticollision.tcp.Session
import io.github.toggery.jt808.messagebody.B8001
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
...@@ -25,6 +29,15 @@ class MainActivity : AppCompatActivity() { ...@@ -25,6 +29,15 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
initNavView() initNavView()
DeviceConfig.province = 11
DeviceConfig.city = 0
DeviceConfig.phoneNumber = "18801011111"
DeviceConfig.HostConfig.host = "192.168.9.48"
DeviceConfig.HostConfig.port = 6608
val session = Session()
thread { session.login() }
} }
private fun initNavView(){ private fun initNavView(){
......
...@@ -5,10 +5,9 @@ import com.blankj.utilcode.util.LogUtils ...@@ -5,10 +5,9 @@ import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.SPStaticUtils import com.blankj.utilcode.util.SPStaticUtils
import com.blankj.utilcode.util.SPUtils import com.blankj.utilcode.util.SPUtils
import com.blankj.utilcode.util.Utils import com.blankj.utilcode.util.Utils
import kotlin.properties.Delegates
object MyApp: Application() { class MyApp: Application() {
lateinit var instance:MyApp
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
...@@ -17,4 +16,10 @@ object MyApp: Application() { ...@@ -17,4 +16,10 @@ object MyApp: Application() {
LogUtils.getConfig().globalTag = "Waytous" LogUtils.getConfig().globalTag = "Waytous"
SPStaticUtils.setDefaultSPUtils(SPUtils.getInstance("settings")) SPStaticUtils.setDefaultSPUtils(SPUtils.getInstance("settings"))
} }
companion object {
//情况一:声明可空的属性
private var instance: MyApp by Delegates.notNull()
fun instance() = instance
}
} }
\ No newline at end of file
...@@ -3,17 +3,17 @@ package com.waytous.anticollision.tcp ...@@ -3,17 +3,17 @@ package com.waytous.anticollision.tcp
/** /**
* 消息同步监听器 * 消息同步监听器
* */ * */
interface SyncMessageListener<T> { interface SyncMessageListener<in T> {
/** /**
* 设备注册 * 设备注册
* @param data * @param data
* */ * */
fun onSignUp(data:T) fun onSignUp(payload:T)
/** /**
* 平台通用应答 * 平台通用应答
* @param data * @param data
* */ * */
fun onCommonResponse(data:T) fun onCommonResponse(payload:T)
} }
\ No newline at end of file
...@@ -3,7 +3,12 @@ package com.waytous.anticollision.tcp ...@@ -3,7 +3,12 @@ package com.waytous.anticollision.tcp
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.waytous.anticollision.BuildConfig import com.waytous.anticollision.BuildConfig
import com.waytous.anticollision.utils.logd import com.waytous.anticollision.utils.logd
import io.github.toggery.jt808.codec.* import io.github.toggery.jt808.codec.Codec
import io.github.toggery.jt808.codec.Message
import io.github.toggery.jt808.codec.MessageMetadata
import io.github.toggery.jt808.messagebody.AbstractToStringJoiner
import io.github.toggery.jt808.messagebody.B8001
import io.github.toggery.jt808.messagebody.B8100
import io.netty.buffer.ByteBuf import io.netty.buffer.ByteBuf
import io.netty.util.DefaultAttributeMap import io.netty.util.DefaultAttributeMap
import io.netty.util.ReferenceCountUtil import io.netty.util.ReferenceCountUtil
...@@ -13,7 +18,7 @@ import io.netty.util.ReferenceCountUtil ...@@ -13,7 +18,7 @@ import io.netty.util.ReferenceCountUtil
* *
* @author male * @author male
* */ * */
class SyncParser(private val syncMessageListener: SyncMessageListener<Codec<*>>) { class SyncParser(private val syncMessageListener: SyncMessageListener<AbstractToStringJoiner>) {
/** /**
* 解析字节流 * 解析字节流
...@@ -21,13 +26,12 @@ class SyncParser(private val syncMessageListener: SyncMessageListener<Codec<*>>) ...@@ -21,13 +26,12 @@ class SyncParser(private val syncMessageListener: SyncMessageListener<Codec<*>>)
* */ * */
fun parse(buf: ByteBuf){ fun parse(buf: ByteBuf){
try { try {
val message: Message<Codec<*>> = Message.decode(buf, MessageMetadata.outbounds(), DefaultAttributeMap()) val message: Message<AbstractToStringJoiner> = Message.decode(buf, MessageMetadata.outbounds(), DefaultAttributeMap())
logd("【解析】:$message") logd("【解析】:$message")
when(val codec:Codec<*> = message.body){ when(val payload:Any = message.body){
is B8001Codec -> syncMessageListener.onCommonResponse(codec) is B8100 -> syncMessageListener.onSignUp(payload)
is B8100Codec -> syncMessageListener.onSignUp(codec) is B8001 -> syncMessageListener.onCommonResponse(payload)
} }
LogUtils.d(message.toString())
} catch (e: Exception) { } catch (e: Exception) {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
LogUtils.e("parse received data error:${e.message}") LogUtils.e("parse received data error:${e.message}")
......
...@@ -142,10 +142,12 @@ internal class TcpManager( ...@@ -142,10 +142,12 @@ internal class TcpManager(
} }
val (errCode, length) = connection.receive() val (errCode, length) = connection.receive()
if (errCode == Error.NOError) { if (errCode == Error.NOError) {
val buf = UnpooledByteBufAllocator.DEFAULT.buffer(length) if (length > 0) {
buf.writeBytes(connection.buffer, 0, length) val buf = UnpooledByteBufAllocator.DEFAULT.buffer(length)
connectListener.onDataReceived(buf) buf.writeBytes(connection.buffer, 0, length)
connection.buffer.fill(0, 0, length - 1) connectListener.onDataReceived(buf)
connection.buffer.fill(0, 0, length - 1)
}
receiveExecutor.execute { receive(timeout) } receiveExecutor.execute { receive(timeout) }
} else { } else {
mCancel.set(true) mCancel.set(true)
...@@ -212,40 +214,39 @@ internal class TcpManager( ...@@ -212,40 +214,39 @@ internal class TcpManager(
* @param timeout * @param timeout
* @return Error * @return Error
* */ * */
fun connect(host: String, port: Int, timeout: Int, receiveInterval: Int = 2): Error = try { fun connect(host: String, port: Int, timeout: Int, receiveInterval: Int = 2): Error {
receiveLock.lock() try {
sendLock.lock() receiveLock.lock()
var errorCode: Error = Error.NOError sendLock.lock()
if (socket.isConnected && connectStatus.get() > State.Disconnected) { if (socket.isConnected && connectStatus.get() > State.Disconnected) {
errorCode = Error.NOError return Error.NOError
} else { }
closeSocket() connectStatus.set(State.Connecting)
socket.soTimeout = receiveInterval
socket.connect(
InetSocketAddress(host, port),
if (timeout > 0) timeout else DEFAULT_TIMEOUT
)
inputStream = socket.getInputStream()
outputStream = socket.getOutputStream()
connectStatus.set(State.Connected)
return Error.NOError
} catch (e: IOException) {
connectStatus.set(State.Disconnected)
return Error.IOError
} catch (e: SocketTimeoutException) {
connectStatus.set(State.Disconnected)
return Error.Timeout
} catch (e: IllegalArgumentException) {
connectStatus.set(State.Disconnected)
return Error.InvalidParam
} catch (e: Exception) {
connectStatus.set(State.Disconnected)
return Error.ServerUnknownError
} finally {
sendLock.unlock()
receiveLock.unlock()
} }
connectStatus.set(State.Connecting)
socket.soTimeout = receiveInterval
socket.connect(
InetSocketAddress(host, port),
if (timeout > 0) timeout else DEFAULT_TIMEOUT
)
inputStream = socket.getInputStream()
outputStream = socket.getOutputStream()
connectStatus.set(State.Connected)
errorCode
} catch (e: IOException) {
connectStatus.set(State.Disconnected)
Error.IOError
} catch (e: SocketTimeoutException) {
connectStatus.set(State.Disconnected)
Error.Timeout
} catch (e: IllegalArgumentException) {
connectStatus.set(State.Disconnected)
Error.InvalidParam
} catch (e: Exception) {
connectStatus.set(State.Disconnected)
Error.ServerUnknownError
} finally {
sendLock.unlock()
receiveLock.unlock()
} }
/** /**
...@@ -292,7 +293,7 @@ internal class TcpManager( ...@@ -292,7 +293,7 @@ internal class TcpManager(
Error.NotConnected, Error.NotConnected,
0 0
) )
if (inputStream.available() < 0) return ReceivedResult(Error.NOError, 0) if (inputStream.available() <= 0) return ReceivedResult(Error.NOError, 0)
val len = inputStream.read(buffer) val len = inputStream.read(buffer)
return if (len > 0) { return if (len > 0) {
ReceivedResult(Error.NOError, len) ReceivedResult(Error.NOError, len)
......
...@@ -37,31 +37,31 @@ class HomeFragment : Fragment() { ...@@ -37,31 +37,31 @@ class HomeFragment : Fragment() {
_binding = FragmentHomeBinding.inflate(inflater, container, false) _binding = FragmentHomeBinding.inflate(inflater, container, false)
val root: View = binding.root val root: View = binding.root
// val mapView: MapView = binding.mapView val mapView: MapView = binding.mapView
val mapView = MapView(this.context!!) // val mapView = MapView(this.context!!)
mapView.getMapboxMap().setCamera( mapView.getMapboxMap().setCamera(
CameraOptions.Builder() CameraOptions.Builder()
.center( // .center(
Point.fromLngLat( // Point.fromLngLat(
LATITUDE, // LATITUDE,
LONGITUDE // LONGITUDE
)) // ))
.zoom(ZOOM).build() .zoom(ZOOM).build()
) )
mapView.getMapboxMap().loadStyle(style(Style.MAPBOX_STREETS){ mapView.getMapboxMap().loadStyle(style(Style.OUTDOORS){
+geoJsonSource(GEOJSON_SOURCE_ID) +geoJsonSource(GEOJSON_SOURCE_ID)
{ {
url("multiple_geometry_example.geojson") url("asset://multiple_geometry_example.geojson")
}
+lineLayer("linelayer", GEOJSON_SOURCE_ID) {
lineCap(LineCap.ROUND)
lineJoin(LineJoin.ROUND)
lineOpacity(0.7)
lineWidth(8.0)
lineColor("#888")
} }
// +lineLayer("linelayer", GEOJSON_SOURCE_ID) {
// lineCap(LineCap.ROUND)
// lineJoin(LineJoin.ROUND)
// lineOpacity(0.7)
// lineWidth(8.0)
// lineColor("#888")
// }
}) })
return mapView return root
} }
override fun onDestroyView() { override fun onDestroyView() {
...@@ -71,8 +71,8 @@ class HomeFragment : Fragment() { ...@@ -71,8 +71,8 @@ class HomeFragment : Fragment() {
companion object { companion object {
private const val GEOJSON_SOURCE_ID = "geo-json" private const val GEOJSON_SOURCE_ID = "geo-json"
private const val LATITUDE = -122.483696 private const val LATITUDE = -77.0911931991577
private const val LONGITUDE = 37.833818 private const val LONGITUDE = 38.95653886174238
private const val ZOOM = 14.0 private const val ZOOM = 14.0
} }
} }
\ No newline at end of file
...@@ -8,9 +8,9 @@ import kotlin.reflect.KProperty ...@@ -8,9 +8,9 @@ import kotlin.reflect.KProperty
class PreferenceDelegate<T>(private val name: String, private val default: T, private val prefName: String = "settings") class PreferenceDelegate<T>(private val name: String, private val default: T, private val prefName: String = "settings")
: ReadWriteProperty<Any?, T> { : ReadWriteProperty<Any?, T> {
private val prefs: SharedPreferences by lazy {
MyApp.instance.applicationContext.getSharedPreferences(prefName, Context.MODE_PRIVATE) private val prefs: SharedPreferences =
} MyApp.instance().applicationContext.getSharedPreferences(prefName, Context.MODE_PRIVATE)
@Synchronized @Synchronized
override fun getValue(thisRef: Any?, property: KProperty<*>): T { override fun getValue(thisRef: Any?, property: KProperty<*>): T {
......
...@@ -11,9 +11,6 @@ ...@@ -11,9 +11,6 @@
android:id="@+id/mapView" android:id="@+id/mapView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
mapbox:mapbox_cameraTargetLat="40.7128"
mapbox:mapbox_cameraTargetLng="-74.0060"
mapbox:mapbox_cameraZoom="9.0"
mapbox:mapbox_resourcesAccessToken="@string/map_box_public_key" mapbox:mapbox_resourcesAccessToken="@string/map_box_public_key"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment