summaryrefslogtreecommitdiff
path: root/interactor/interactor.js
diff options
context:
space:
mode:
Diffstat (limited to 'interactor/interactor.js')
-rwxr-xr-xinteractor/interactor.js30
1 files changed, 28 insertions, 2 deletions
diff --git a/interactor/interactor.js b/interactor/interactor.js
index 2d38cbb..843bf2c 100755
--- a/interactor/interactor.js
+++ b/interactor/interactor.js
@@ -36,6 +36,16 @@ app.get("/",function(req,res){
});
});
+function stopproc(proc){
+ proc.stdin.write("Quit\n");
+ var timeout=setTimeout(function(){
+ proc.kill();
+ },500);
+ proc.on("exit",function(){
+ clearTimeout(timeout);
+ });
+}
+
io.on("connection",function(conn){
var id=uniqid();
console.log("New IO connection id "+id);
@@ -57,16 +67,24 @@ io.on("connection",function(conn){
bd[y][x].c=1-aiplayer;
bd[y][x].n++;
bd=stabilise(bd);
+ if(countballs(bd)>2){
+ var win=checkwin(bd);
+ if(win!=-1){
+ conn.emit("win",1-aiplayer);
+ stopproc(proc);
+ return;
+ }
+ }
proc.stdin.write(x+" "+y+"\n");
});
var proc=spawn("sh",["-c",aicmd],{
- stdio:["pipe","pipe","inherit"]
+ stdio:["pipe","pipe",process.stderr]
});
var buffer="";
proc.stdout.on("data",function(data){
- var idx,line,mv;
+ var idx,line,mv,win;
buffer+=data;
while((idx=buffer.indexOf("\n"))!=-1){
line=buffer.slice(0,idx);
@@ -82,6 +100,14 @@ io.on("connection",function(conn){
bd[mv[1]][mv[0]].n++;
bd=stabilise(bd);
conn.emit("applymove",{index:W*mv[1]+mv[0],player:aiplayer});
+ if(countballs(bd)>2){
+ win=checkwin(bd);
+ if(win!=-1){
+ conn.emit("win",aiplayer);
+ stopproc(proc);
+ return;
+ }
+ }
conn.emit("setonturn",1-aiplayer);
conn.emit("getusermove");
}