Java/C#/C++ implementation of Styx (9P2000) protocol
How to use it in Java
Java server:
/**
* Java server that calculate MD5 digest.
* @author V.Shcriyabets (vshcryabets@gmail.com)
*
*/
public class JavaServerSample {
private static final int PORT = 10234;
private static final String FILE_NAME = "md5file";
public static void main(String[] args) throws IOException, StyxException, InterruptedException, TimeoutException {
MemoryStyxFile md5 = new MemoryStyxFile(FILE_NAME){
protected HashMap<ClientDetails, MessageDigest> mClientsMap = new HashMap<ClientDetails, MessageDigest>();
@Override
public boolean open(ClientDetails client, int mode)
throws IOException {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
mClientsMap.put(client, md);
} catch (NoSuchAlgorithmException e) {
return false;
}
return super.open(client, mode);
}
@Override
public void close(ClientDetails client) {
mClientsMap.remove(client);
super.close(client);
}
@Override
public int write(ClientDetails client, byte[] data, long offset)
throws StyxErrorMessageException {
if ( mClientsMap.containsKey(client) ) {
mClientsMap.get(client).update(data, 0, data.length);
}
return super.write(client, data, offset);
}
@Override
public long read(ClientDetails client, byte[] outbuffer, long offset, long count)
throws StyxErrorMessageException {
if ( mClientsMap.containsKey(client) ) {
byte[] digest = mClientsMap.get(client).digest();
if (count < digest.length) {
return 0;
} else {
System.arraycopy(digest, 0, outbuffer, 0, digest.length);
return digest.length;
}
}
return super.read(client, outbuffer, offset, count);
}
};
MemoryStyxDirectory root = new MemoryStyxDirectory("root");
root.addFile(md5);
StyxServerManager mServer = new TCPServerManager(InetAddress.getByName("127.0.0.1"),
PORT,
false,
root);
Thread[] threads = mServer.start();
System.out.println("Test server listen on 127.0.0.1:" + PORT);
for(Thread thread : threads) {
thread.join();
}
}
}
Java client sample:
IClient connection = new Connection();
IChannelDriver driver = new TCPClientChannelDriver(
InetAddress.getByName("127.0.0.1"), PORT, false);
connection.connect(driver)
final StyxFile newFile = new StyxFile(connection, FILE_NAME);
OutputStream output = newFile.openForWrite();
InputStream input = newFile.openForRead();
output.write(someData);
output.flush();
byte [] remoteHash = new byte[16];
int read = input.read(remoteHash);
output.close();
input.close();
connection.close();