Free Session on Android

This commit is contained in:
Florian Märkl 2019-09-15 12:06:32 +02:00
commit cb65009f59
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
3 changed files with 55 additions and 7 deletions

View file

@ -121,8 +121,29 @@ beach:
E->SetLongField(env, result, E->GetFieldID(env, result_class, "sessionPtr", "J"), (jlong)session);
}
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionFree(JNIEnv *env, jobject obj, jlong ptr)
{
ChiakiSession *session = (ChiakiSession *)ptr;
if(!session)
return;
chiaki_session_fini(session);
free(session);
}
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStart(JNIEnv *env, jobject obj, jlong ptr)
{
ChiakiSession *session = (ChiakiSession *)ptr;
return chiaki_session_start(session);
}
}
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStop(JNIEnv *env, jobject obj, jlong ptr)
{
ChiakiSession *session = (ChiakiSession *)ptr;
return chiaki_session_stop(session);
}
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionJoin(JNIEnv *env, jobject obj, jlong ptr)
{
ChiakiSession *session = (ChiakiSession *)ptr;
return chiaki_session_join(session);
}

View file

@ -4,6 +4,7 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.metallic.chiaki.lib.ConnectInfo
import com.metallic.chiaki.lib.Session
import com.metallic.chiaki.lib.SessionCreateError
import kotlinx.android.synthetic.main.activity_stream.*
class StreamActivity : AppCompatActivity()
@ -13,7 +14,7 @@ class StreamActivity : AppCompatActivity()
const val EXTRA_CONNECT_INFO = "connect_info"
}
private lateinit var session: Session
private var session: Session? = null
override fun onCreate(savedInstanceState: Bundle?)
{
@ -27,8 +28,24 @@ class StreamActivity : AppCompatActivity()
return
}
session = Session(connectInfo)
session.start()
try
{
val session = Session(connectInfo)
session.start()
this.session = session
}
catch(e: SessionCreateError)
{
// TODO: handle error
}
testTextView.text = ""
}
override fun onDestroy()
{
super.onDestroy()
session?.stop()
session?.dispose()
}
}

View file

@ -31,7 +31,10 @@ class ChiakiNative
}
@JvmStatic external fun errorCodeToString(value: Int): String
@JvmStatic external fun sessionCreate(result: SessionCreateResult, connectInfo: ConnectInfo)
@JvmStatic external fun sessionFree(ptr: Long)
@JvmStatic external fun sessionStart(ptr: Long): Int
@JvmStatic external fun sessionStop(ptr: Long): Int
@JvmStatic external fun sessionJoin(ptr: Long): Int
}
}
@ -45,7 +48,7 @@ class SessionCreateError(val errorCode: ErrorCode): Exception("Failed to create
class Session(connectInfo: ConnectInfo)
{
private val nativePtr: Long
private var nativePtr: Long
init
{
@ -57,8 +60,15 @@ class Session(connectInfo: ConnectInfo)
nativePtr = result.sessionPtr
}
fun start()
fun start() = ErrorCode(ChiakiNative.sessionStart(nativePtr))
fun stop() = ErrorCode(ChiakiNative.sessionStop(nativePtr))
fun dispose()
{
ChiakiNative.sessionStart(nativePtr)
if(nativePtr == 0L)
return
ChiakiNative.sessionJoin(nativePtr)
ChiakiNative.sessionFree(nativePtr)
nativePtr = 0L
}
}