@@ -37,36 +37,35 @@ import io.zenoh.query.*
3737import io.zenoh.sample.Sample
3838import io.zenoh.sample.SampleKind
3939import org.apache.commons.net.ntp.TimeStamp
40- import java.util.concurrent.atomic.AtomicLong
4140
4241/* * Adapter class to handle the communication with the Zenoh JNI code for a [Session]. */
43- internal class JNISession {
42+ internal class JNISession ( val sessionPtr : Long ) {
4443
4544 companion object {
4645 init {
4746 ZenohLoad
4847 }
49- }
5048
51- /* Pointer to the underlying Rust zenoh session. */
52- internal var sessionPtr: AtomicLong = AtomicLong (0 )
49+ @Throws(ZError ::class )
50+ fun open (config : Config ): JNISession {
51+ val sessionPtr = openSessionViaJNI(config.jniConfig.ptr)
52+ return JNISession (sessionPtr)
53+ }
5354
54- @Throws(ZError ::class )
55- fun open (config : Config ) {
56- val session = openSessionViaJNI(config.jniConfig.ptr)
57- sessionPtr.set(session)
55+ @Throws(ZError ::class )
56+ private external fun openSessionViaJNI (configPtr : Long ): Long
5857 }
5958
6059 fun close () {
61- closeSessionViaJNI(sessionPtr.get() )
60+ closeSessionViaJNI(sessionPtr)
6261 }
6362
6463 @Throws(ZError ::class )
6564 fun declarePublisher (keyExpr : KeyExpr , publisherOptions : PublisherOptions ): Publisher {
6665 val publisherRawPtr = declarePublisherViaJNI(
6766 keyExpr.jniKeyExpr?.ptr ? : 0 ,
6867 keyExpr.keyExpr,
69- sessionPtr.get() ,
68+ sessionPtr,
7069 publisherOptions.congestionControl.value,
7170 publisherOptions.priority.value,
7271 publisherOptions.express,
@@ -100,7 +99,7 @@ internal class JNISession {
10099 handler.handle(sample)
101100 }
102101 val subscriberRawPtr = declareSubscriberViaJNI(
103- keyExpr.jniKeyExpr?.ptr ? : 0 , keyExpr.keyExpr, sessionPtr.get() , subCallback, handler::onClose
102+ keyExpr.jniKeyExpr?.ptr ? : 0 , keyExpr.keyExpr, sessionPtr, subCallback, handler::onClose
104103 )
105104 return HandlerSubscriber (keyExpr, JNISubscriber (subscriberRawPtr), handler.receiver())
106105 }
@@ -126,7 +125,7 @@ internal class JNISession {
126125 val subscriberRawPtr = declareSubscriberViaJNI(
127126 keyExpr.jniKeyExpr?.ptr ? : 0 ,
128127 keyExpr.keyExpr,
129- sessionPtr.get() ,
128+ sessionPtr,
130129 subCallback,
131130 fun () {}
132131 )
@@ -159,7 +158,7 @@ internal class JNISession {
159158 val queryableRawPtr = declareQueryableViaJNI(
160159 keyExpr.jniKeyExpr?.ptr ? : 0 ,
161160 keyExpr.keyExpr,
162- sessionPtr.get() ,
161+ sessionPtr,
163162 queryCallback,
164163 fun () {},
165164 config.complete
@@ -193,7 +192,7 @@ internal class JNISession {
193192 val queryableRawPtr = declareQueryableViaJNI(
194193 keyExpr.jniKeyExpr?.ptr ? : 0 ,
195194 keyExpr.keyExpr,
196- sessionPtr.get() ,
195+ sessionPtr,
197196 queryCallback,
198197 handler::onClose,
199198 config.complete
@@ -209,7 +208,7 @@ internal class JNISession {
209208 val querierRawPtr = declareQuerierViaJNI(
210209 keyExpr.jniKeyExpr?.ptr ? : 0 ,
211210 keyExpr.keyExpr,
212- sessionPtr.get() ,
211+ sessionPtr,
213212 options.target.ordinal,
214213 options.consolidationMode.ordinal,
215214 options.congestionControl.ordinal,
@@ -277,7 +276,7 @@ internal class JNISession {
277276 selector.keyExpr.jniKeyExpr?.ptr ? : 0 ,
278277 selector.keyExpr.keyExpr,
279278 selector.parameters?.toString(),
280- sessionPtr.get() ,
279+ sessionPtr,
281280 getCallback,
282281 fun () {},
283282 options.timeout.toMillis(),
@@ -342,7 +341,7 @@ internal class JNISession {
342341 selector.keyExpr.jniKeyExpr?.ptr ? : 0 ,
343342 selector.keyExpr.keyExpr,
344343 selector.parameters?.toString(),
345- sessionPtr.get() ,
344+ sessionPtr,
346345 getCallback,
347346 handler::onClose,
348347 options.timeout.toMillis(),
@@ -361,14 +360,14 @@ internal class JNISession {
361360
362361 @Throws(ZError ::class )
363362 fun declareKeyExpr (keyExpr : String ): KeyExpr {
364- val ptr = declareKeyExprViaJNI(sessionPtr.get() , keyExpr)
363+ val ptr = declareKeyExprViaJNI(sessionPtr, keyExpr)
365364 return KeyExpr (keyExpr, JNIKeyExpr (ptr))
366365 }
367366
368367 @Throws(ZError ::class )
369368 fun undeclareKeyExpr (keyExpr : KeyExpr ) {
370369 keyExpr.jniKeyExpr?.run {
371- undeclareKeyExprViaJNI(sessionPtr.get() , this .ptr)
370+ undeclareKeyExprViaJNI(sessionPtr, this .ptr)
372371 keyExpr.jniKeyExpr = null
373372 } ? : throw ZError (" Attempting to undeclare a non declared key expression." )
374373 }
@@ -383,7 +382,7 @@ internal class JNISession {
383382 putViaJNI(
384383 keyExpr.jniKeyExpr?.ptr ? : 0 ,
385384 keyExpr.keyExpr,
386- sessionPtr.get() ,
385+ sessionPtr,
387386 payload.into().bytes,
388387 encoding.id,
389388 encoding.schema,
@@ -403,7 +402,7 @@ internal class JNISession {
403402 deleteViaJNI(
404403 keyExpr.jniKeyExpr?.ptr ? : 0 ,
405404 keyExpr.keyExpr,
406- sessionPtr.get() ,
405+ sessionPtr,
407406 options.congestionControl.value,
408407 options.priority.value,
409408 options.express,
@@ -414,17 +413,17 @@ internal class JNISession {
414413
415414 @Throws(ZError ::class )
416415 fun zid (): ZenohId {
417- return ZenohId (getZidViaJNI(sessionPtr.get() ))
416+ return ZenohId (getZidViaJNI(sessionPtr))
418417 }
419418
420419 @Throws(ZError ::class )
421420 fun peersZid (): List <ZenohId > {
422- return getPeersZidViaJNI(sessionPtr.get() ).map { ZenohId (it) }
421+ return getPeersZidViaJNI(sessionPtr).map { ZenohId (it) }
423422 }
424423
425424 @Throws(ZError ::class )
426425 fun routersZid (): List <ZenohId > {
427- return getRoutersZidViaJNI(sessionPtr.get() ).map { ZenohId (it) }
426+ return getRoutersZidViaJNI(sessionPtr).map { ZenohId (it) }
428427 }
429428
430429 @Throws(ZError ::class )
@@ -436,9 +435,6 @@ internal class JNISession {
436435 @Throws(ZError ::class )
437436 private external fun getRoutersZidViaJNI (ptr : Long ): List <ByteArray >
438437
439- @Throws(ZError ::class )
440- private external fun openSessionViaJNI (configPtr : Long ): Long
441-
442438 @Throws(ZError ::class )
443439 private external fun closeSessionViaJNI (ptr : Long )
444440
0 commit comments