mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 23:34:49 +01:00
feat: try_recv CursorController
Co-authored-by: alemi <me@alemi.dev>
This commit is contained in:
parent
73fe5eb023
commit
490670b8bc
5 changed files with 56 additions and 17 deletions
|
@ -1,5 +1,6 @@
|
||||||
package mp.code;
|
package mp.code;
|
||||||
|
|
||||||
|
import mp.code.data.Cursor;
|
||||||
import mp.code.exceptions.CodeMPLibException;
|
import mp.code.exceptions.CodeMPLibException;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
@ -49,11 +50,29 @@ public class Client {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO - remove everything past this line
|
// TODO - remove everything past this line
|
||||||
public static void main(String[] args) throws CodeMPLibException {
|
public static void main(String[] args) throws CodeMPLibException, InterruptedException {
|
||||||
Client c = new Client("http://alemi.dev:50053");
|
Client c = new Client("http://alemi.dev:50053");
|
||||||
c.login(UUID.randomUUID().toString(), "lmaodefaultpassword", "glue");
|
c.login(UUID.randomUUID().toString(), "lmaodefaultpassword", "glue");
|
||||||
c.joinWorkspace("glue");
|
Workspace workspace = c.joinWorkspace("glue");
|
||||||
System.out.println("Done!");
|
System.out.println(workspace.getWorkspaceId());
|
||||||
|
while(true) {
|
||||||
|
Cursor cursor = workspace.getCursor().tryRecv();
|
||||||
|
if(cursor == null) System.out.println("null!");
|
||||||
|
else {
|
||||||
|
System.out.printf(
|
||||||
|
"sr: %d, sc: %d, er: %d, ec: %d, cursor: %s, buffer: %s\n",
|
||||||
|
cursor.startRow,
|
||||||
|
cursor.startCol,
|
||||||
|
cursor.endRow,
|
||||||
|
cursor.endCol,
|
||||||
|
cursor.user,
|
||||||
|
cursor.buffer
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("Done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -10,9 +10,9 @@ public class CursorController {
|
||||||
this.ptr = ptr;
|
this.ptr = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native Cursor recv(long self);
|
private static native Cursor try_recv(long self);
|
||||||
public Cursor recv() {
|
public Cursor tryRecv() {
|
||||||
return recv(this.ptr);
|
return try_recv(this.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native void send(long self, Cursor cursor);
|
private static native void send(long self, Cursor cursor);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use jni::{objects::{JClass, JObject}, sys::{jlong, jobject, jstring}, JNIEnv};
|
use jni::{objects::{JClass, JObject}, sys::{jlong, jobject, jstring}, JNIEnv};
|
||||||
|
|
||||||
use crate::{api::Controller, buffer::Controller};
|
use crate::api::Controller;
|
||||||
|
|
||||||
use super::util::JExceptable;
|
use super::util::JExceptable;
|
||||||
|
|
||||||
|
@ -82,6 +82,6 @@ pub extern "system" fn Java_mp_code_BufferController_free<'local>(
|
||||||
_class: JClass<'local>,
|
_class: JClass<'local>,
|
||||||
self_ptr: jlong,
|
self_ptr: jlong,
|
||||||
) {
|
) {
|
||||||
unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) };
|
let _ = unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use jni::{objects::{JClass, JObject}, sys::{jlong, jobject}, JNIEnv};
|
use jni::{objects::{JClass, JObject, JValueGen}, sys::{jlong, jobject}, JNIEnv};
|
||||||
|
use crate::{api::Controller, ffi::java::util::JExceptable};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: mp_code_CursorController
|
* Class: mp_code_CursorController
|
||||||
|
@ -6,13 +7,32 @@ use jni::{objects::{JClass, JObject}, sys::{jlong, jobject}, JNIEnv};
|
||||||
* Signature: (J)Lmp/code/data/Cursor;
|
* Signature: (J)Lmp/code/data/Cursor;
|
||||||
*/
|
*/
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "system" fn Java_mp_code_CursorController_recv<'local>(
|
pub extern "system" fn Java_mp_code_CursorController_try_1recv(
|
||||||
mut env: JNIEnv,
|
mut env: JNIEnv,
|
||||||
_class: JClass<'local>,
|
_class: JClass,
|
||||||
self_ptr: jlong,
|
self_ptr: jlong,
|
||||||
) -> jobject {
|
) -> jobject {
|
||||||
todo!()
|
let controller = unsafe { Box::leak(Box::from_raw(self_ptr as *mut crate::cursor::Controller)) };
|
||||||
|
match controller.try_recv().jexcept(&mut env) {
|
||||||
|
None => JObject::null().as_raw(),
|
||||||
|
Some(event) => {
|
||||||
|
let class = env.find_class("mp/code/data/Cursor").expect("Couldn't find class!");
|
||||||
|
env.new_object(
|
||||||
|
class,
|
||||||
|
"(IIIILjava/lang/String;Ljava/lang/String;)V",
|
||||||
|
&[
|
||||||
|
JValueGen::Int(event.start.0),
|
||||||
|
JValueGen::Int(event.start.1),
|
||||||
|
JValueGen::Int(event.end.0),
|
||||||
|
JValueGen::Int(event.end.1),
|
||||||
|
JValueGen::Object(&env.new_string(event.buffer).expect("Failed to create String!")),
|
||||||
|
JValueGen::Object(&env.new_string(event.user.map(|x| x.to_string()).unwrap_or_default()).expect("Failed to create String!"))
|
||||||
|
]
|
||||||
|
).expect("failed creating object").into_raw()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// public Cursor(int startRow, int startCol, int endRow, int endCol, String buffer, String user) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: mp_code_CursorController
|
* Class: mp_code_CursorController
|
||||||
|
@ -26,7 +46,7 @@ pub extern "system" fn Java_mp_code_CursorController_send<'local>(
|
||||||
self_ptr: jlong,
|
self_ptr: jlong,
|
||||||
input: JObject<'local>,
|
input: JObject<'local>,
|
||||||
) {
|
) {
|
||||||
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -40,5 +60,5 @@ pub extern "system" fn Java_mp_code_CursorController_free<'local>(
|
||||||
_class: JClass<'local>,
|
_class: JClass<'local>,
|
||||||
self_ptr: jlong,
|
self_ptr: jlong,
|
||||||
) {
|
) {
|
||||||
unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) };
|
let _ = unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) };
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ pub extern "system" fn Java_mp_code_Workspace_free(_env: JNIEnv, _class: JClass,
|
||||||
|
|
||||||
/// Gets the workspace id.
|
/// Gets the workspace id.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "system" fn Java_mp_code_Client_get_1workspace_1id<'local>(
|
pub extern "system" fn Java_mp_code_Workspace_get_1workspace_1id<'local>(
|
||||||
env: JNIEnv<'local>,
|
env: JNIEnv<'local>,
|
||||||
_class: JClass<'local>,
|
_class: JClass<'local>,
|
||||||
self_ptr: jlong
|
self_ptr: jlong
|
||||||
|
@ -24,7 +24,7 @@ pub extern "system" fn Java_mp_code_Client_get_1workspace_1id<'local>(
|
||||||
|
|
||||||
/// Gets a cursor controller by name and returns a pointer to it.
|
/// Gets a cursor controller by name and returns a pointer to it.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "system" fn Java_mp_code_Client_get_1cursor<'local>(
|
pub extern "system" fn Java_mp_code_Workspace_get_1cursor<'local>(
|
||||||
_env: JNIEnv<'local>,
|
_env: JNIEnv<'local>,
|
||||||
_class: JClass<'local>,
|
_class: JClass<'local>,
|
||||||
self_ptr: jlong
|
self_ptr: jlong
|
||||||
|
@ -35,7 +35,7 @@ pub extern "system" fn Java_mp_code_Client_get_1cursor<'local>(
|
||||||
|
|
||||||
/// Gets a buffer controller by name and returns a pointer to it.
|
/// Gets a buffer controller by name and returns a pointer to it.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "system" fn Java_mp_code_Client_get_1buffer<'local>(
|
pub extern "system" fn Java_mp_code_Workspace_get_1buffer<'local>(
|
||||||
env: JNIEnv<'local>,
|
env: JNIEnv<'local>,
|
||||||
_class: JClass<'local>,
|
_class: JClass<'local>,
|
||||||
self_ptr: jlong,
|
self_ptr: jlong,
|
||||||
|
|
Loading…
Reference in a new issue