fix: removed tonioware

also moved select_buffer locally for testing, until it's stable
This commit is contained in:
zaaarf 2023-11-29 00:51:51 +01:00
parent 7ae82c83c0
commit 878df9716f
No known key found for this signature in database
GPG key ID: 6445A5CD15E5B40C
3 changed files with 34 additions and 14 deletions

View file

@ -4,11 +4,12 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
codemp = { git = "ssh://git@github.com/codewithotherpeopleandchangenamelater/codemp.git", tag = "0.5.0", features = ["global", "sync"] } codemp = { git = "ssh://git@github.com/codewithotherpeopleandchangenamelater/codemp.git", tag = "v0.5.0", features = ["global", "sync"] }
jni = { version = "0.21.1", features = ["invocation"] } jni = { version = "0.21.1", features = ["invocation"] }
jni-sys = "0.3.0" jni-sys = "0.3.0"
log = "0.4.20" log = "0.4.20"
rifgen = { git = "https://github.com/Kofituo/rifgen.git", rev = "d27d9785b2febcf5527f1deb6a846be5d583f7d7"} rifgen = { git = "https://github.com/Kofituo/rifgen.git", rev = "d27d9785b2febcf5527f1deb6a846be5d583f7d7"}
tokio = "1.34.0"
[build-dependencies] [build-dependencies]
flapigen = "0.6.0" flapigen = "0.6.0"

View file

@ -23,7 +23,6 @@ import java.util.concurrent.ConcurrentHashMap;
public class BufferEventAwaiterTask extends Task.Backgroundable implements Disposable { public class BufferEventAwaiterTask extends Task.Backgroundable implements Disposable {
private final Map<String, Disposable> bufferListeners = new ConcurrentHashMap<>(); private final Map<String, Disposable> bufferListeners = new ConcurrentHashMap<>();
private final Set<String> initialisedBuffers = Collections.newSetFromMap(new ConcurrentHashMap<>()); //also tonioware
public BufferEventAwaiterTask(@NotNull Project project) { public BufferEventAwaiterTask(@NotNull Project project) {
super(project, "Awaiting CodeMP buffer events", false); super(project, "Awaiting CodeMP buffer events", false);
@ -44,7 +43,6 @@ public class BufferEventAwaiterTask extends Task.Backgroundable implements Dispo
public void unregisterListener(String name) { public void unregisterListener(String name) {
CodeMP.ACTIVE_BUFFERS_REVERSE.remove(CodeMP.ACTIVE_BUFFERS.remove(name)); CodeMP.ACTIVE_BUFFERS_REVERSE.remove(CodeMP.ACTIVE_BUFFERS.remove(name));
this.initialisedBuffers.remove(name);
Disposable listener = this.bufferListeners.remove(name); Disposable listener = this.bufferListeners.remove(name);
if(listener != null) if(listener != null)
listener.dispose(); listener.dispose();
@ -54,7 +52,7 @@ public class BufferEventAwaiterTask extends Task.Backgroundable implements Dispo
public void dispose() {} public void dispose() {}
@Override @Override
@SuppressWarnings({"InfiniteLoopStatement", "UnstableApiUsage", "BusyWait"}) @SuppressWarnings({"InfiniteLoopStatement", "UnstableApiUsage"})
public void run(@NotNull ProgressIndicator indicator) { public void run(@NotNull ProgressIndicator indicator) {
try { try {
while(true) { while(true) {
@ -66,13 +64,6 @@ public class BufferEventAwaiterTask extends Task.Backgroundable implements Dispo
continue; continue;
String buffer = bufferOptional.get(); String buffer = bufferOptional.get();
if(!this.initialisedBuffers.contains(buffer)) { //tonioware
try {
Thread.sleep(100);
} catch(InterruptedException ignored) {}
this.initialisedBuffers.add(buffer);
}
BufferHandler handler = CodeMPHandler.getBuffer(buffer); BufferHandler handler = CodeMPHandler.getBuffer(buffer);
List<TextChangeWrapper> changeList = new ArrayList<>(); List<TextChangeWrapper> changeList = new ArrayList<>();

View file

@ -1,7 +1,6 @@
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use codemp::prelude::*; use codemp::prelude::*;
use codemp::tools;
use rifgen::rifgen_attr::{generate_access_methods, generate_interface, generate_interface_doc}; use rifgen::rifgen_attr::{generate_access_methods, generate_interface, generate_interface_doc};
pub mod glue { //rifgen generated code pub mod glue { //rifgen generated code
@ -76,8 +75,37 @@ impl CodeMPHandler {
Err(_) => continue Err(_) => continue
} }
} }
CODEMP_INSTANCE.rt().block_on(
tools::select_buffer_timeout(&buffers, Duration::from_millis(timeout as u64))) let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel();
let mut tasks = Vec::new();
for buffer in buffers {
let _tx = tx.clone();
let _buffer = buffer.clone();
tasks.push(CODEMP_INSTANCE.rt().spawn(async move {
match _buffer.poll().await {
Ok(()) => _tx.send(Ok(Some(_buffer.name.clone()))),
Err(_) => _tx.send(Err(CodempError::Channel { send: true })),
}
}))
}
let _tx = tx.clone();
tasks.push(CODEMP_INSTANCE.rt().spawn(async move {
tokio::time::sleep(Duration::from_millis(timeout as u64)).await;
_tx.send(Ok(None))
}));
loop {
match CODEMP_INSTANCE.rt().block_on(rx.recv()) {
None => return Err(CodempError::Channel { send: false }),
Some(Err(_)) => continue,
Some(Ok(None)) => return Ok(None),
Some(Ok(Some(x))) => {
for t in tasks {
t.abort();
}
return Ok(Some(x.clone()));
},
}
}
} }
} }