From b72697c41219f6d39edcadf426fb16d965dc3096 Mon Sep 17 00:00:00 2001 From: mcmlxxix <> Date: Fri, 5 Sep 2008 00:23:35 +0000 Subject: [PATCH] data queue communication engine uses Queue() class and file I/O for multi-user gaming & chat --- exec/load/qengine.js | 94 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 exec/load/qengine.js diff --git a/exec/load/qengine.js b/exec/load/qengine.js new file mode 100644 index 0000000000..e277af5be1 --- /dev/null +++ b/exec/load/qengine.js @@ -0,0 +1,94 @@ +/* + JAVASCRIPT MULTI-USER ENGINE -- BY MCMLXXIX (Matt Johnson) 05/2008 + USING FILE I/O FOR USER PRESENCE DETECTION & NAMED QUEUES FOR REAL-TIME MULTIPLAYER DATA +*/ + +load("sbbsdefs.js"); +load("logging.js"); +load("funclib.js"); + +var QueueEngineLog; + +function DataQueue(root,name,log_) +{ + QueueEngineLog=(log_?log_:new Logger(root,name)); + + this.root=root; + this.name=name; + this.users=[]; + this.notices=[]; + this.stream= new Queue(this.name + "_" + user.number); + this.user_file= new File(this.root + user.number + ".usr"); + + this.ReceiveData=function(ident) + { + this.UpdateUsers(); + var data=[]; + if(this.stream.poll(ident)) { + while(this.stream.poll(ident)) + { + var incoming_data=this.stream.read(ident); + Log("received data from user: " + system.username(incoming_data.user)); + data.push=incoming_data; + } + } + return data; + } + this.SendData=function(data,ident) + { + for(user_ in this.users) + { + this.UpdateUsers(); + this.users[user_].Send(data,ident); + Log("sending data to user: " + this.users[user_].user); + } + } + this.UpdateUsers=function() + { + var user_list=directory(this.root + "*.usr"); + for(user_ in user_list) + { + var user_file=user_list[user_]; + var user_file_name=file_getname(user_file); + var user_number=user_file_name.substring(0,user_file_name.indexOf(".")); + if(!this.users[user_number] && user_number!=user.number) + { + var user_queue=this.name+"_"+user_number; + this.users[user_number]=new QueueUser(user_number,user_file,user_queue); + this.notices.push(system.username(user_number) + " is here."); + Log("loaded new user: " + system.username(user_number)); + } + } + for(user_ in this.users) + { + if(!file_exists(this.users[user_].file)) + { + delete this.users[user_]; + this.notices.push(system.username(user_) + " has left."); + Log("removing absent user: " + system.username(user_)); + } + } + } + this.Init=function(data) + { + this.UpdateUsers(); + this.user_file.open('w+'); + if(data) this.user_file.writeAll(data); + this.user_file.close(); + } + function Log(text) + { + QueueEngineLog.Log(text); + } + this.Init(); +} +function QueueUser(user_number,user_file,user_queue) +{ + this.user=user_number; + this.file=user_file; + this.queue=new Queue(user_queue); + this.Send=function(data,ident) + { + this.queue.write(data,ident); + } +} -- GitLab