Salve, come avevo già prospettato in un precedente 3D, ho l'insana intenzione di implementare una gui che si interfacci con gli engine scacchistici.
Su consiglio di Marco Rame(QUI) , sto codificando una libreria Java che mi permetta di comunicare con uno dei predetti engine, vale a dire Stockfish for android(stockfish-8-arm64-v8a), scaricabile da questo link https://stockfishchess.org/download/
Al momento, il codice è il seguente:
Come potete notare, per comunicare con l'engine stockfish-8-arm64-v8a, caricato su B4A con il File Manager, viene utilizzato il Java ProcessBuilder, che permette di scambiare comandi UCI tramite InputStream/OutputStream.
Il problema, però, è che la func setup() mi va in errore nella riga dove viene istanziato il ProcessBuilder
Il seguente(LOG):
Un aiutino?
Stolcius
Su consiglio di Marco Rame(QUI) , sto codificando una libreria Java che mi permetta di comunicare con uno dei predetti engine, vale a dire Stockfish for android(stockfish-8-arm64-v8a), scaricabile da questo link https://stockfishchess.org/download/
Al momento, il codice è il seguente:
B4X:
package anywheresoftware.b4a.objects;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.CompoundButton.OnCheckedChangeListener;
import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.Events;
import anywheresoftware.b4a.BA.Hide;
import anywheresoftware.b4a.BA.ShortName;
import anywheresoftware.b4a.BA.ActivityObject;
import anywheresoftware.b4a.keywords.Common.DesignerCustomView;
import anywheresoftware.b4a.keywords.constants.Colors;
import anywheresoftware.b4a.keywords.Common;
import java.io.*;
//import java.lang.ProcessBuilder;
@ShortName("ChessLib2")
public class ChessLib2 {
private BA ba;
ProcessBuilder pb;
Process p=null;
InputStream in = null;
OutputStream out = null;
public void setup() {
Common.Log("inside setup");
/*
Engine stockfish 'stockfish-8-arm64-v8a' for android scaricato da https://stockfishchess.org/download/
e caricano nel progetto B4A
*/
String fileEngine ="stockfish-8-arm64-v8a";
String filePathString = anywheresoftware.b4a.objects.streams.File.virtualAssetsFolder;
String fileFullPath = filePathString + "/" + fileEngine;
Common.Log("fileFullPath: " + fileFullPath);
//controllo che il file sia visibile da codice Java
File varTmpDir = new File(fileFullPath);
boolean exists = varTmpDir.exists();
Common.Log("file exists:" + exists);
pb = new ProcessBuilder( fileFullPath, "" );
try {
p = pb.start();
Common.Log("Processo OK!");
} catch (Exception e) {
Common.Log("Errore:" + e);
}
Common.Log("fine proc setup");
}
}
Come potete notare, per comunicare con l'engine stockfish-8-arm64-v8a, caricato su B4A con il File Manager, viene utilizzato il Java ProcessBuilder, che permette di scambiare comandi UCI tramite InputStream/OutputStream.
Il problema, però, è che la func setup() mi va in errore nella riga dove viene istanziato il ProcessBuilder
B4X:
pb = new ProcessBuilder( fileFullPath, "" );
Il seguente(LOG):
B4X:
** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
inside setup
fileFullPath: /data/user/0/b4a.stolcius.chessgui/files/virtual_assets/stockfish-8-arm64-v8a
file exists:true
Errore:java.io.IOException: Error running exec(). Command: [/data/user/0/b4a.stolcius.chessgui/files/virtual_assets/stockfish-8-arm64-v8a, ] Working Directory: null Environment: [ANDROID_ROOT=/system, ANDROID_BOOTLOGO=1, EXTERNAL_STORAGE=/sdcard, SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar, ANDROID_SOCKET_zygote=11, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_DATA=/data, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/apache-xml.jar:/system/framework/org.apache.http.legacy.boot.jar, ANDROID_PROPERTY_WORKSPACE=9,0, ANDROID_STORAGE=/storage]
fine proc setup
** Activity (main) Resume **
Un aiutino?
Stolcius