update
This commit is contained in:
parent
5c2d042211
commit
3f618711bd
@ -32,7 +32,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
|
||||||
implementation 'androidx.core:core-ktx:1.7.0'
|
implementation 'androidx.core:core-ktx:1.7.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||||
implementation 'com.google.android.material:material:1.5.0'
|
implementation 'com.google.android.material:material:1.5.0'
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.rookiedev.hexapod">
|
package="com.rookiedev.hexapod">
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -7,11 +7,15 @@ import android.util.TypedValue
|
|||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import java.lang.Math.min
|
import com.rookiedev.hexapod.network.TCPClient
|
||||||
|
import com.rookiedev.hexapod.network.TCPClient.OnConnectEstablished
|
||||||
|
import com.rookiedev.hexapod.network.TCPClient.OnMessageReceived
|
||||||
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
|
import kotlin.math.PI
|
||||||
|
import kotlin.math.atan2
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
import kotlin.math.atan2
|
import kotlinx.coroutines.*
|
||||||
import kotlin.math.PI
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,6 +71,14 @@ class ControlActivity : AppCompatActivity() {
|
|||||||
private var height = 0
|
private var height = 0
|
||||||
private var radius = 0f
|
private var radius = 0f
|
||||||
|
|
||||||
|
private var tcpClient: TCPClient? = null
|
||||||
|
|
||||||
|
private val scope = CoroutineScope(Job() + Dispatchers.IO)
|
||||||
|
|
||||||
|
// private val lock = ReentrantLock()
|
||||||
|
// private val waitLock = lock.newCondition()
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@ -114,29 +126,77 @@ class ControlActivity : AppCompatActivity() {
|
|||||||
val length = sqrt(coorX.pow(2) + coorY.pow(2))
|
val length = sqrt(coorX.pow(2) + coorY.pow(2))
|
||||||
if (length < radius / 3) {
|
if (length < radius / 3) {
|
||||||
println("Standby")
|
println("Standby")
|
||||||
|
|
||||||
|
sendMessageAsync("Standby")
|
||||||
} else if (length >= radius / 3 && length < 2 * radius / 3) {
|
} else if (length >= radius / 3 && length < 2 * radius / 3) {
|
||||||
var angle = atan2(coorY, coorX)
|
var angle = atan2(coorY, coorX)
|
||||||
if (angle>-PI/4 && angle<=PI/4)
|
if (angle > -PI / 4 && angle <= PI / 4) {
|
||||||
{
|
|
||||||
println("Move right")
|
println("Move right")
|
||||||
} else if ( angle>PI/4 && angle<=3*PI/4){
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Move right")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (angle > PI / 4 && angle <= 3 * PI / 4) {
|
||||||
println("Move back")
|
println("Move back")
|
||||||
} else if ( angle>-3*PI/4 && angle<-PI/4){
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Move back")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (angle > -3 * PI / 4 && angle < -PI / 4) {
|
||||||
println("Move forward")
|
println("Move forward")
|
||||||
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Move forward")
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
println("Move left")
|
println("Move left")
|
||||||
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Move left")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (length >= 2 * radius / 3 && length < radius) {
|
} else if (length >= 2 * radius / 3 && length < radius) {
|
||||||
var angle = atan2(coorY, coorX)
|
var angle = atan2(coorY, coorX)
|
||||||
if (angle>-PI/4 && angle<=PI/4)
|
if (angle > -PI / 4 && angle <= PI / 4) {
|
||||||
{
|
|
||||||
println("Turn right")
|
println("Turn right")
|
||||||
} else if ( angle>PI/4 && angle<=3*PI/4){
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Turn right")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (angle > PI / 4 && angle <= 3 * PI / 4) {
|
||||||
println("Fast back")
|
println("Fast back")
|
||||||
} else if ( angle>-3*PI/4 && angle<-PI/4){
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Fast back")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (angle > -3 * PI / 4 && angle < -PI / 4) {
|
||||||
println("Fast forward")
|
println("Fast forward")
|
||||||
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Fast forward")
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
println("Turn left")
|
println("Turn left")
|
||||||
|
|
||||||
|
runBlocking { // this: CoroutineScope
|
||||||
|
launch { // launch a new coroutine and continue
|
||||||
|
tcpClient?.sendMessage("Turn left")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// val width = view.width
|
// val width = view.width
|
||||||
@ -149,6 +209,21 @@ class ControlActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
this.tcpClient = TCPClient(this, "192.168.1.202", 1234, object : OnMessageReceived {
|
||||||
|
override fun messageReceived(message: String?) {
|
||||||
|
if (message == null) {
|
||||||
|
// alertDialog(DISCONNECTED)
|
||||||
|
println("no message")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, object : OnConnectEstablished {
|
||||||
|
override fun onConnected() {
|
||||||
|
// udpClient.start()
|
||||||
|
println("connected")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
this.tcpClient!!.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -166,5 +241,26 @@ class ControlActivity : AppCompatActivity() {
|
|||||||
insetsController.show(type)
|
insetsController.show(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fun sendMessageAsync(message: String) {
|
||||||
|
// Starts a new coroutine within the scope
|
||||||
|
scope.launch {
|
||||||
|
// New coroutine that can call suspend functions
|
||||||
|
// suspend fun sendMessage(message: String) = // Dispatchers.Main
|
||||||
|
withContext(Dispatchers.IO) { // Dispatchers.IO (main-safety block)
|
||||||
|
tcpClient?.sendMessage(message)
|
||||||
|
/* perform network IO here */ // Dispatchers.IO (main-safety block)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// suspend fun sendMessage(message: String) = // Dispatchers.Main
|
||||||
|
// withContext(Dispatchers.IO) { // Dispatchers.IO (main-safety block)
|
||||||
|
// tcpClient?.sendMessage(message)
|
||||||
|
// /* perform network IO here */ // Dispatchers.IO (main-safety block)
|
||||||
|
// } // Dispatchers.Main
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,118 @@
|
|||||||
|
package com.rookiedev.hexapod.network
|
||||||
|
|
||||||
|
import com.rookiedev.hexapod.ControlActivity
|
||||||
|
import android.util.Log
|
||||||
|
import java.io.*
|
||||||
|
import java.net.InetAddress
|
||||||
|
import java.net.InetSocketAddress
|
||||||
|
import java.net.Socket
|
||||||
|
import java.net.UnknownHostException
|
||||||
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
|
|
||||||
|
|
||||||
|
class TCPClient(
|
||||||
|
c: ControlActivity,
|
||||||
|
ip: String?,
|
||||||
|
port: Int,
|
||||||
|
messagelistener: OnMessageReceived?,
|
||||||
|
onconnected: OnConnectEstablished?
|
||||||
|
) :
|
||||||
|
Thread() {
|
||||||
|
private val controller: ControlActivity = c
|
||||||
|
private var TCPSocket:Socket? = null
|
||||||
|
private var SERVERIP: InetAddress? = null
|
||||||
|
private val SERVERPORT: Int
|
||||||
|
private var serverAddr: InetSocketAddress? = null
|
||||||
|
private var TCPOut: PrintWriter? = null
|
||||||
|
private var TCPIn: BufferedReader? = null
|
||||||
|
private var TCPMessage: String? = null
|
||||||
|
private var mMessageListener: OnMessageReceived? = null
|
||||||
|
private var onConnected: OnConnectEstablished? = null
|
||||||
|
private var isConnected = false
|
||||||
|
private var pause = false // if the thread is paused by system
|
||||||
|
private var isNewData = false
|
||||||
|
private var newMessage:String? = null
|
||||||
|
override fun run() {
|
||||||
|
try {
|
||||||
|
this.TCPSocket = Socket()
|
||||||
|
this.TCPSocket!!.soTimeout = 3000
|
||||||
|
this.TCPSocket!!.connect(serverAddr, 3000) // connecting socket and set timeout in 3s
|
||||||
|
onConnected!!.onConnected()
|
||||||
|
TCPOut = PrintWriter(
|
||||||
|
BufferedWriter(OutputStreamWriter(this.TCPSocket!!.getOutputStream())),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
// sendMessage("test")
|
||||||
|
isConnected = true
|
||||||
|
while(isConnected)
|
||||||
|
{
|
||||||
|
// if (isNewData)
|
||||||
|
// {
|
||||||
|
// if (TCPOut != null && !TCPOut!!.checkError()) {
|
||||||
|
// TCPOut!!.println(newMessage)
|
||||||
|
// TCPOut!!.flush()
|
||||||
|
// }
|
||||||
|
// isNewData = false
|
||||||
|
// }else{
|
||||||
|
// sleep(100)
|
||||||
|
// }
|
||||||
|
sleep(1000)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// controller.cancelProgressDialog(java.lang.ModuleLayer.Controller.SERVERALERT)
|
||||||
|
println("unable to connect")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// private fun keepAlive() {
|
||||||
|
// sendMessage(Constants.requestMessage(Constants.REQUEST_ISALIVE))
|
||||||
|
// try {
|
||||||
|
// TCPMessage = TCPIn!!.readLine()
|
||||||
|
// mMessageListener!!.messageReceived(TCPMessage)
|
||||||
|
// } catch (e: IOException) {
|
||||||
|
// controller.alertDialog(java.lang.ModuleLayer.Controller.DISCONNECTED)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the message entered by client to the server
|
||||||
|
*
|
||||||
|
* @param message text entered by client
|
||||||
|
*/
|
||||||
|
fun sendMessage(message: String?) {
|
||||||
|
// newMessage = message
|
||||||
|
// isNewData = true
|
||||||
|
if (TCPOut != null && !TCPOut!!.checkError()) {
|
||||||
|
TCPOut!!.println(message)
|
||||||
|
TCPOut!!.flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fun stopClient() {
|
||||||
|
// sendMessage(Constants.requestMessage(Constants.REQUEST_DISCONNECT))
|
||||||
|
// pause = true
|
||||||
|
// isConnected = false
|
||||||
|
// }
|
||||||
|
|
||||||
|
interface OnMessageReceived {
|
||||||
|
fun messageReceived(message: String?)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnConnectEstablished {
|
||||||
|
fun onConnected()
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
SERVERPORT = port
|
||||||
|
mMessageListener = messagelistener
|
||||||
|
onConnected = onconnected
|
||||||
|
try {
|
||||||
|
SERVERIP = InetAddress.getByName(ip)
|
||||||
|
serverAddr = InetSocketAddress(SERVERIP, SERVERPORT)
|
||||||
|
} catch (e: UnknownHostException) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
pause = false
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user