Sunday, October 4, 2009

jess telnet wrapper?

Multi users can telnet to jess working memory after authentication.
yet while calling(exit) for one user , all user breaks out.


package org.jesstools.telnetforjess;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import jess.*;

public class TelnetJessThread implements Runnable{

final static int port = 1222;
SocketHandler scktHandler = null;
static Main main=null;
static Rete rt = null;

public TelnetJessThread(SocketHandler scktHandler){
this.scktHandler=scktHandler;
}
public static void main(String[] args) {
try {
main = new Main();
rt = new Rete();
ServerSocket ssckt= new ServerSocket(port);
while(true){
Socket s1 = ssckt.accept();
Thread tjs= new Thread(new TelnetJessThread(new SocketHandler(s1)));
tjs.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void run(){
try {
System.out.println("oh1");

rt.addOutputRouter("t", scktHandler.jpw);
rt.addInputRouter("t", scktHandler.jpr, true);
rt.addInputRouter("WSTDIN", scktHandler.jpr, true);
rt.addOutputRouter("WSTDOUT", scktHandler.jpw);
rt.addOutputRouter("WSTDERR", scktHandler.jpw);
main.initialize(new String[0], rt);
main.execute(main.getM_filename() == null);

Thread.sleep(1234);

} catch (Exception e) {
e.printStackTrace();
}

}
}







package org.jesstools.telnetforjess;

import java.net.*;
import java.io.*;

public class SocketHandler {
Socket sckt=null;
String user=null;
JessPipedReader jpr=null;
JessPipedWriter jpw=null;
public boolean loggedIn=false;

public SocketHandler(Socket sckt){
try {
this.sckt=sckt;
jpr=new JessPipedReader(sckt.getInputStream());
jpw=new JessPipedWriter(sckt.getOutputStream());
jpr.sckthndlr=this;
if(!loggedIn)
login();
} catch (IOException e) {
e.printStackTrace();
}
}

private void login() {
try{
while(!loggedIn){
jpw.write(" \n");
jpw.flush();
jpw.write("Login: ");
jpw.flush();
String login=readLine();
System.out.println("login="+login);
jpw.write("Password: ");
jpw.flush();
String password=readLine();
//System.out.println("password="+password);
if(authenticate(login, password)){
System.out.println("loggedIn: "+login);
loggedIn=true;
}
}
}catch(Exception e){
e.printStackTrace();
}

}

private String readLine(){
try{
char c=' ';StringBuffer _str=new StringBuffer();
while((c=(char)jpr.read())!= '\n' )
_str.append(c);
return _str.substring(0, _str.length()-1);
}catch(Exception e){
e.printStackTrace();
}
return "";

}

private boolean authenticate(String username, String passwd){
if("user1".equals(username) && "passwd1".equals(passwd))
return true;
else
return false;
}
}




JessPipedReader and JessPipedWriter are 2 extra classes that extend InputStreamReader and OutputStreamWriter.. overrode close() method to not call super.close(). still its closing!!! why??

Followers

About Me