Skip to content
Snippets Groups Projects
Commit 88fe5269 authored by mcmlxxix's avatar mcmlxxix
Browse files

Added some connection failsafe checking to avoid spamming myself.

parent 22ed878a
No related branches found
No related tags found
No related merge requests found
......@@ -250,17 +250,13 @@ function hub_connect()
hub=new Socket();
hub.bind(0,server.interface_ip_address);
//if a central hub address is provided, attempt connection
for(var t=0;t<connection_attempts;t++)
hub.connect(hub_address,hub_port,connection_timeout);
if(hub.is_connected)
{
if(hub.connect(hub_address,hub_port,connection_timeout))
{
//send node identifier and bbs name so hub knows this is a distribution point
hub.send(remote + system.name + "\r\n");
log("connection to " + hub_address + " successful");
return true;
}
mswait(50);
//send node identifier and bbs name so hub knows this is a distribution point
hub.send(remote + system.name + "\r\n");
log("connection to " + hub_address + " successful");
return true;
}
log("connection to " + hub_address + " failed with error " + hub.error);
return false;
......@@ -361,6 +357,21 @@ function send_updates(socket)
//TODO
function whos_online()
{
var list=[];
for(var rc=0;rc<count_remote_sessions;rc++)
{
var conn=remote_sessions[rc];
//hmmmmm
}
for(var g in local_sessions)
{
for(var lc=0;lc<local_sessions[g].length;lc++)
{
var conn=local_sessions[g][lc];
//todo?!
}
}
return list;
}
function find_user()
{
......
......@@ -122,6 +122,13 @@ function ChatEngine(root,stream)
this.DrawBox();
this.GetNotices();
this.EntryMessage();
if(!this.stream)
{
log("unable to connect to service...");
return false;
}
return true;
}
this.EntryMessage=function()
{
......@@ -223,7 +230,10 @@ function ChatEngine(root,stream)
this.Send=function(message)
{
var packet=this.PackageData(message);
this.stream.send(packet);
if(!this.stream.send(packet))
{
this.Notice("message could not be sent..");
}
scope=normal_scope;
//this.StoreHistory(data.message);
}
......
......@@ -15,7 +15,7 @@ const hub_query= "?";
const priv_scope= "%";
const file_sync= "@";
const tries= 5;
const connection_timeout= 2;
const connection_timeout= 5;
function GameConnection(id)
{
......@@ -40,14 +40,11 @@ function GameConnection(id)
this.init=function()
{
this.notices.push("Connecting to hub... ");
for(var t=0;t<tries;t++)
sock.connect(hub,port,connection_timeout);
if(sock.is_connected)
{
sock.connect(hub,port,connection_timeout);
if(sock.is_connected)
{
sock.send("&" + this.session_id + "\r\n");
return true;
}
sock.send("&" + this.session_id + "\r\n");
return true;
}
this.notices.push("Connection to " + hub + " failed...");
return false;
......@@ -75,54 +72,73 @@ function GameConnection(id)
{
if(!sock.is_connected)
{
if(!this.init()) return -1;
if(!this.init()) return false;
}
if(!data.scope)
{
log("scope undefined");
return -1;
return false;
}
var packet=data.scope + this.session_id + "" + data.toSource() + "\r\n";
sock.send(packet);
return true;
}
this.recvfile=function(remote_file)
{
if(!sock.is_connected)
{
if(!this.init()) return false;
}
var filesock=new Socket();
filesock.bind(0,server.interface_ip_address);
filesock.connect(hub,port,connection_timeout);
if(filesock.is_connected)
{
filesock.send(file_sync + this.session_id + "#send" + file_getname(remote_file) + "\r\n");
while(filesock.is_connected)
var count=0;
while(filesock.is_connected && count<50)
{
var data=filesock.recvline(1024,connection_timeout);
data=parse_query(data);
var response=data[1];
var file=data[2];
var date=data[3];
switch(response)
var data=false;
if(filesock.data_waiting) data=parse_query(filesock.recvline(1024,connection_timeout));
if(data)
{
case "#askrecv":
receive_file(filesock,this.session_id,file,date);
break;
case "#abort":
filesock.close();
return false;
case "#endquery":
filesock.close();
return true;
default:
filesock.close();
log("unknown response: " + response);
return false;
var response=data[1];
var file=data[2];
var date=data[3];
switch(response)
{
case "#askrecv":
receive_file(filesock,this.session_id,file,date);
break;
case "#abort":
filesock.close();
return false;
case "#endquery":
filesock.close();
return true;
default:
filesock.close();
log("unknown response: " + response);
return false;
}
count=0;
}
else
{
count++;
mswait(25);
}
}
}
}
this.sendfile=function(local_file)
{
if(!sock.is_connected)
{
if(!this.init()) return false;
}
var filesock=new Socket();
filesock.bind(0,server.interface_ip_address);
filesock.connect(hub,port,connection_timeout);
......@@ -160,6 +176,7 @@ function GameConnection(id)
}
filesock.send("#endquery\r\n");
filesock.close();
return 1;
}
this.close=function()
{
......@@ -172,12 +189,11 @@ function GameConnection(id)
filename=working_dir+filename;
if(file_date(filename)==filedate)
{
log("skipping file");
log("skipping file: " + file_getname(filename));
socket.send(file_sync + session_id + "#skip\r\n");
return false;
}
log("confirming transfer");
socket.send(file_sync + session_id + "#ok\r\n");
var file=new File(filename + ".tmp");
file.open('w',false);
......@@ -208,6 +224,7 @@ function GameConnection(id)
break;
}
count=0;
}
else
{
......@@ -228,7 +245,7 @@ function GameConnection(id)
if(!sock.is_connected)
{
if(!this.init()) return -1;
if(!this.init()) return false;
}
}
......
......@@ -49,28 +49,41 @@ function sync_remote(session_id,dir,filemask)
var filedate=file_date(files[f]);
sock.send("@" + session_id + "#askrecv" + filename + "" + filedate + "\r\n");
var data=sock.recvline(1024,connection_timeout);
data=parse_query(data);
var response=data[1];
switch(response)
var count=0;
while(count<50)
{
case "#ok":
log("sending file: " + filename);
sock.sendfile(files[f]);
sock.send("#eof\r\n");
log("file sent: " + filename);
break;
case "#skip":
log("skipping file");
var data=false;
if(sock.data_waiting) data=parse_query(sock.recvline(1024,connection_timeout));
if(data)
{
var response=data[1];
switch(response)
{
case "#ok":
log("sending file: " + filename);
sock.sendfile(files[f]);
sock.send("#eof\r\n");
log("file sent: " + filename);
break;
case "#skip":
log("skipping file: " + filename);
break;
case "#abort":
log("aborting query");
return false;
default:
log("unknown response: " + response);
sock.send("#abort\r\n");
return false;
}
count=0;
break;
case "#abort":
log("aborting query");
return false;
default:
log("unknown response: " + response);
sock.send("#abort\r\n");
return false;
}
else
{
count++;
mswait(50);
}
}
}
sock.send("@" + session_id + "#endquery\r\n");
......@@ -82,30 +95,41 @@ function sync_local(session_id,dir,filemask)
log("retrieving files: " + filemask);
if(!sock.is_connected) log("connection interrupted");
sock.send("@" + session_id + "#send" + file_getname(filemask) + "\r\n");
while(sock.is_connected)
var count=0;
while(count<50)
{
var data=sock.recvline(1024,connection_timeout);
data=parse_query(data);
var response=data[1];
var file=data[2];
var date=data[3];
switch(response)
var data=false;
if(sock.data_waiting) data=parse_query(sock.recvline(1024,connection_timeout));
if(data)
{
case "#askrecv":
receive_file(dir,file,date);
break;
case "#abort":
return false;
case "#endquery":
return true;
default:
log("unknown response: " + response);
return false;
var response=data[1];
var file=data[2];
var date=data[3];
switch(response)
{
case "#askrecv":
receive_file(dir,file,date);
break;
case "#abort":
return false;
case "#endquery":
return true;
default:
log("unknown response: " + response);
return false;
}
count=0;
break;
}
else
{
count++;
mswait(25);
}
}
sock.close();
log("complete");
}
function receive_file(session_id,dir,filename,filedate)
{
......@@ -146,8 +170,8 @@ function receive_file(session_id,dir,filename,filedate)
default:
file.writeln(data);
break;
}
count=0;
}
else
{
......
......@@ -74,7 +74,11 @@ function ChessLobby()
var columns=38;
var posx=42;
var posy=3;
chesschat.Init(room,true,columns,rows,posx,posy,false,false,"\1y");
if(!chesschat.Init(room,true,columns,rows,posx,posy,false,false,"\1y"))
{
log("chat initialization failed");
exit(0);
}
}
function InitMenu()
{
......@@ -242,6 +246,8 @@ function ChessLobby()
{
while(1)
{
//TODO: figure out why this isnt working?
//if(!Cycle()) exit(0);
Cycle();
var k=console.inkey(K_NOCRLF|K_NOSPIN|K_NOECHO,25);
if(k)
......@@ -289,9 +295,9 @@ function ChessLobby()
GetNotices();
UpdateTables();
if(!stream) return;
if(!stream) return -1;
var packet=stream.receive();
if(!packet) return;
if(!packet) return 0;
if(packet.room==room || packet.scope==global_scope)
{
......@@ -308,6 +314,7 @@ function ChessLobby()
break;
}
}
return 1;
}
function LobbyMenu()
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment