Skip to content

Commit 6c80480

Browse files
committed
First push
1 parent 1c7bbdd commit 6c80480

File tree

11 files changed

+928
-0
lines changed

11 files changed

+928
-0
lines changed

Diff for: .gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ $RECYCLE.BIN/
4545
Network Trash Folder
4646
Temporary Items
4747
.apdisk
48+
49+
node_modules/
50+
StartServer.exe.lnk

Diff for: Classes/GameObject.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Index
2+
var objectCount = 0;
3+
4+
5+
function GameObject() {
6+
var self = this;
7+
8+
self.position = {x:0, y:0};
9+
self.velocity = {x:0, y:0};
10+
self.size = {x:10, y:10};
11+
self.scale = {x:1, y:1};
12+
self.classType = "EmptyObject";
13+
14+
self.ID = objectCount++;
15+
}
16+
17+
18+
19+
exports.new = () => {
20+
21+
return new GameObject();
22+
}

Diff for: Classes/Player.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Index
2+
var playerCount = 0;
3+
4+
5+
function Player( Socket ) {
6+
var self = this;
7+
self.class = "Player";
8+
9+
10+
self.__defineGetter__( 'Socket', () => {return self._Socket;} )
11+
self.__defineSetter__( 'Socket', (val) => {
12+
13+
self._Socket = val;
14+
15+
if (self.Socket) {
16+
self.Socket.removeAllListeners('heartbeat');
17+
self.Socket.removeAllListeners('object_to_broadcaster');
18+
self.Socket.removeAllListeners('IDrequest_from_client');
19+
20+
self.Socket.on('heartbeat', function() {
21+
22+
if (self.CurrentRoom)
23+
self.lifetime = new Date().getTime() + self.CurrentRoom.maxIdle * 2;
24+
else
25+
self.lifetime = defaultValues.lifetime;
26+
});
27+
28+
29+
self.Socket.on('objects_to_broadcaster', function(data) {
30+
31+
if (data && self.CurrentRoom) {
32+
33+
for (var objectID in data) {
34+
35+
self.CurrentRoom.setObject( objectID, data[ objectID ] );
36+
}
37+
} else console.log('something went wrong1: ' + data, self.CurrentRoom)
38+
})
39+
40+
self.Socket.on('IDrequest_from_client', () => {
41+
42+
self.Socket.emit("IDrequest_to_client", {ID:self.ID, room:self.CurrentRoom.name});
43+
});
44+
self.Socket.emit("IDrequest_to_client", self.ID);
45+
46+
if (self.CurrentRoom) {
47+
self.CurrentRoom.broadcastPlayerlist();
48+
self.Socket.emit("IDrequest_to_client", {ID:self.ID, room:self.CurrentRoom.name});
49+
}
50+
}
51+
})
52+
53+
self.ID = playerCount++;
54+
self.Socket = Socket;
55+
self.CurrentRoom = undefined;
56+
self.lifetime = defaultValues.lifetime;
57+
}
58+
59+
60+
var defaultValues = {
61+
lifetime: Infinity, //Miliseconds
62+
}
63+
64+
65+
66+
exports.new = () => {
67+
return new Player();
68+
}

Diff for: Classes/Que.js

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// Index
2+
quesCounter = 0;
3+
setInterval(() => {
4+
5+
for (var queID in ques)
6+
ques[ queID ].update();
7+
}, 10)
8+
var ques = {
9+
//queID: QueObject,
10+
}
11+
12+
13+
// Functons
14+
function Que() {
15+
var self = this;
16+
self.class = "Que";
17+
18+
var ID = quesCounter++;
19+
20+
self.data = {}
21+
var sendTime = 0;
22+
23+
//Add data item
24+
self.addQue = (key, value) => {
25+
26+
self.data[ key ] = value;
27+
}
28+
self.deleteQueItem = (key) => {
29+
30+
delete self.data[ key ];
31+
}
32+
self.deleteQue = (key) => {
33+
34+
self.data = {};
35+
}
36+
37+
self.update = () => {
38+
39+
var time = new Date().getTime();
40+
41+
//Check for the cooldown
42+
if (time > sendTime) {
43+
44+
//Reset timer
45+
sendTime = time + defaultValues.sendTime
46+
47+
48+
//Check if the list isn't empty
49+
if (Object.keys(self.data).length > 0) {
50+
51+
52+
//Fire events
53+
for (var index in listeners)
54+
listeners[index]( self.data )
55+
56+
//Make a new data object incase the listeners are using the old data object
57+
self.data = {};
58+
}
59+
}
60+
}
61+
62+
63+
listeners = {};
64+
self.addListener = ( name, funct ) => {
65+
66+
if (name != undefined && typeof(funct) == "function")
67+
listeners[ name ] = funct;
68+
else console.error( "funct or name is missing or invalid" )
69+
}
70+
self.removeListener = ( name ) => {
71+
72+
if (listeners[ name ])
73+
delete listeners[ name ];
74+
}
75+
76+
77+
//To stop/start the data
78+
ques[ ID ] = self;
79+
self.stop = () => {
80+
delete ques[ ID ];
81+
}
82+
self.start = () => {
83+
sendTime = new Date().getTime() + defaultValues.sendTime
84+
ques[ ID ] = self;
85+
}
86+
}
87+
88+
89+
//Values
90+
var defaultValues = {
91+
sendTime: 100,
92+
}
93+
94+
95+
96+
//Exports
97+
exports.new = () => {
98+
99+
return new Que();
100+
}

Diff for: Classes/Room.js

+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
// Index
2+
var Instance = require("./../Instance");
3+
var roomCount = 0;
4+
5+
6+
// Functons
7+
sendPackage = function( Player, listenerName, data ) {
8+
9+
if (Player.Socket == undefined) {
10+
return false
11+
}
12+
13+
14+
Player.Socket.emit( listenerName, data );
15+
}
16+
17+
18+
function Room() {
19+
var self = this;
20+
self.class = "Room";
21+
22+
23+
//--Functions
24+
self.addPlayer = ( Player ) => {
25+
26+
//Check if the player is valid
27+
if (typeof(Player) == "object" && Player.class == 'Player') {
28+
29+
if (self.playerCount < self.maxPlayers) {
30+
Player.CurrentRoom = self;
31+
Player.lifetime = new Date().getTime() + defaultValues.maxIdle;
32+
self.players[ Player.ID ] = Player;
33+
self.playerCount++;
34+
35+
self.broadcastPlayerlist();
36+
return true;
37+
}
38+
39+
} else console.error("'Player' is not valid!");
40+
41+
return false;
42+
};
43+
self.removePlayer = ( Player, reason ) => {
44+
45+
//Check if the player is valid
46+
if (typeof(Player) == "object" && Player.class == 'Player') {
47+
48+
if (self.players[ Player.ID ]) {
49+
Player.CurrentRoom = undefined;
50+
delete self.players[ Player.ID ];
51+
self.playerCount--;
52+
53+
console.log("Player " + Player.ID + " Has been kicked from room " + self.name + ". Reason: " + reason);
54+
55+
self.broadcastPlayerlist();
56+
return true;
57+
}
58+
59+
} else console.error('Player is not valid!');
60+
61+
return false;
62+
};
63+
self.broadcastPlayerlist = () => {
64+
65+
var playerlist = {};
66+
for (var playerID in self.players) {
67+
68+
playerlist[ playerID ] = true;
69+
}
70+
for (var playerID in self.players) {
71+
72+
if (self.players[ playerID ].Socket != undefined)
73+
self.players[ playerID ].Socket.emit("updatePlayerlist", playerlist );
74+
}
75+
};
76+
self.name = roomCount++;
77+
self.players = {};
78+
self.playerCount = 0;
79+
self.maxPlayers = defaultValues.maxPlayers;
80+
self.maxIdle = defaultValues.maxIdle
81+
82+
self.roomReplyTime = defaultValues.roomReplyTime;
83+
self.changes = {
84+
//[ID]
85+
};
86+
87+
var worldName = undefined;
88+
89+
90+
self.update = () => {
91+
92+
for (var playerID in self.players) {
93+
94+
if (new Date().getTime() > self.players[ playerID ].lifetime)
95+
self.removePlayer( self.players[ playerID ], defaultValues.reasons.idle );
96+
}
97+
}
98+
99+
100+
self.workspaceRules = {
101+
readOnly: defaultValues.workspace.ReadOnly,
102+
clientsCanSpawnObjects: defaultValues.workspace.clientsCanSpawnObjects,
103+
}
104+
var workspace = {
105+
//ObjectID: Properties { }
106+
//GameObject's here
107+
}
108+
109+
self.setObject = ( objectID, properties ) => {
110+
111+
//Check if object exists
112+
if (!workspace[ objectID ] && self.workspaceRules.clientsCanSpawnObjects) {
113+
114+
//Create a new one if it doesn't
115+
var newObject = Instance.new( "GameObject" );
116+
newObject.ID = objectID
117+
workspace[ objectID ] = newObject
118+
} else if (!self.workspaceRules.clientsCanSpawnObjects) console.log("cannot spawn objects from client");
119+
120+
//Set the properties
121+
for (var propertyName in properties) {
122+
123+
//Check if the property is allowed to be set
124+
if (defaultValues.allowedProperties[ propertyName ] == true)
125+
workspace[ objectID ][ propertyName ] = properties[ propertyName ];
126+
}
127+
128+
Que.addQue( objectID, workspace[ objectID ] );
129+
}
130+
131+
132+
var Que = Instance.new("Que");
133+
Que.sendTime = defaultValues.roomReplyTime;
134+
Que.addListener( "broadcastWorkspace", (data) => {
135+
136+
for (playerID in self.players)
137+
sendPackage( self.players[ playerID ], "broadcastWorkspace", data );
138+
})
139+
}
140+
141+
142+
//Values
143+
var defaultValues = {
144+
roomReplyTime: 20, //Miliseconds
145+
maxIdle: 5000, //Miliseconds
146+
maxPlayers: 2, //Max connections
147+
reasons: {
148+
idle: 'For being idle too long',
149+
},
150+
151+
workspace: {
152+
readOnly: false,
153+
clientsCanSpawnObjects: true,
154+
},
155+
allowedProperties: {
156+
position: true,
157+
velocity: true,
158+
size: true,
159+
scale: true,
160+
class: true,
161+
controller: true,
162+
sender: true,
163+
},
164+
}
165+
166+
167+
168+
//Exports
169+
exports.new = () => {
170+
171+
return new Room();
172+
}

0 commit comments

Comments
 (0)