srctree

endoffile78 parent 0aa83427 89f1d677
Implement ToxThread

inlinesplit
app/src/main/java/ltd/evilcorp/atox/App.kt added: 93, removed: 64, total 29
@@ -6,5 +6,6 @@ class App : Application() {
companion object {
lateinit var profile: String
lateinit var password: String
lateinit var toxThread: ToxThread
}
}
 
app/src/main/java/ltd/evilcorp/atox/ProfileActivity.kt added: 93, removed: 64, total 29
@@ -4,26 +4,10 @@ import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import im.tox.tox4j.core.options.ProxyOptions
import im.tox.tox4j.core.options.SaveDataOptions
import im.tox.tox4j.core.options.ToxOptions
import kotlinx.android.synthetic.main.activity_profile.*
import java.lang.Thread.sleep
import kotlin.concurrent.thread
import java.io.File
 
private const val HEX_CHARS = "0123456789ABCDEF"
 
private fun String.hexToByteArray(): ByteArray {
val bytes = ByteArray(length / 2)
 
for (i in 0 until length step 2) {
bytes[i.shr(1)] = HEX_CHARS.indexOf(this[i]).shl(4).or(HEX_CHARS.indexOf(this[i + 1])).toByte()
}
 
return bytes
}
 
private fun loadToxSave(saveFile: File): ByteArray? {
if (!saveFile.exists()) {
return null
@@ -34,52 +18,11 @@ private fun loadToxSave(saveFile: File): ByteArray? {
 
class ProfileActivity : AppCompatActivity() {
 
private fun startToxThread(saveOption: SaveDataOptions) { //TODO(endoffile78): seperate this to its own class or the Tox class
thread(start = true) {
val tox = Tox(
ToxOptions(
true,
true,
true,
ProxyOptions.`None$`(),
0,
0,
0,
saveOption,
true
)
)
 
tox.bootstrap(
"tox.verdict.gg",
33445,
"1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976".hexToByteArray()
)
tox.bootstrap(
"tox.kurnevsky.net",
33445,
"82EF82BA33445A1F91A7DB27189ECFC0C013E06E3DA71F588ED692BED625EC23".hexToByteArray()
)
tox.bootstrap(
"tox.abilinski.com",
33445,
"10C00EB250C3233E343E2AEBA07115A5C28920E9C8D29492F6D00B29049EDC7E".hexToByteArray()
)
 
tox.setName(App.profile)
tox.save(filesDir.toString(), false)
 
Log.e("Profile", tox.getName())
 
while (true) {
sleep(tox.iterate().toLong())
}
}
}
 
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
 
App.toxThread = ToxThread(filesDir.toString())
 
var profile: File? = null
filesDir.walk().forEach {
if (it.extension.equals("tox") && it.isFile) {
@@ -94,7 +37,7 @@ class ProfileActivity : AppCompatActivity() {
val data = loadToxSave(profile!!)
if (data != null) {
saveOption = SaveDataOptions.`ToxSave`(data)
this.startToxThread(saveOption)
App.toxThread.start(saveOption)
Log.e("Profile", "Skipping create profile")
startActivity(Intent(this, ContactListActivity::class.java))
finish()
@@ -108,7 +51,8 @@ class ProfileActivity : AppCompatActivity() {
App.password = if (password.text.isNotEmpty()) password.text.toString() else ""
startActivity(Intent(this@ProfileActivity, ContactListActivity::class.java))
 
this.startToxThread(SaveDataOptions.`None$`())
App.toxThread.start(SaveDataOptions.`None$`())
App.toxThread.triggerSave()
 
finish()
}
 
filename was Deleted added: 93, removed: 64, total 29
@@ -0,0 +1,84 @@
package ltd.evilcorp.atox
 
import android.util.Log
import im.tox.tox4j.core.options.ProxyOptions
import im.tox.tox4j.core.options.SaveDataOptions
import im.tox.tox4j.core.options.ToxOptions
import kotlin.concurrent.thread
import java.util.concurrent.atomic.AtomicBoolean
 
private const val HEX_CHARS = "0123456789ABCDEF"
 
private fun String.hexToByteArray(): ByteArray {
val bytes = ByteArray(length / 2)
 
for (i in 0 until length step 2) {
bytes[i.shr(1)] = HEX_CHARS.indexOf(this[i]).shl(4).or(HEX_CHARS.indexOf(this[i + 1])).toByte()
}
 
return bytes
}
 
class ToxThread(dest: String) {
 
private var thread: Thread? = null
private val saveDest: String = dest
private var needSave: AtomicBoolean = AtomicBoolean(false)
 
fun start(saveOption: SaveDataOptions) {
Log.e("ToxThread", "Starting tox thread")
thread = thread(start = true, name = "Tox") {
val tox = Tox(
ToxOptions(
true,
true,
true,
ProxyOptions.`None$`(),
0,
0,
0,
saveOption,
true
)
)
 
tox.bootstrap(
"tox.verdict.gg",
33445,
"1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976".hexToByteArray()
)
tox.bootstrap(
"tox.kurnevsky.net",
33445,
"82EF82BA33445A1F91A7DB27189ECFC0C013E06E3DA71F588ED692BED625EC23".hexToByteArray()
)
tox.bootstrap(
"tox.abilinski.com",
33445,
"10C00EB250C3233E343E2AEBA07115A5C28920E9C8D29492F6D00B29049EDC7E".hexToByteArray()
)
 
tox.setName(App.profile)
 
Log.e("Profile", tox.getName())
 
while (true) {
if (needSave.get()) {
tox.save(saveDest, false)
needSave.set(false)
}
 
Thread.sleep(tox.iterate().toLong())
}
}
}
 
fun triggerSave() {
needSave.set(true)
}
 
fun stop() {
Log.e("ToxThread", "Killing tox thread")
thread!!.stop()
}
}