Ability to send data back and forth

This commit is contained in:
Ethan O'Brien 2023-07-17 09:00:32 -05:00
parent 4cef38112d
commit f0c094a061
4 changed files with 81 additions and 13 deletions

1
a.html
View file

@ -22,6 +22,7 @@
EJS_startOnLoaded = true; EJS_startOnLoaded = true;
//EJS_loadStateURL = "mega_mountain.state"; //EJS_loadStateURL = "mega_mountain.state";
EJS_netplayServer = "http://127.0.0.1:3000"; EJS_netplayServer = "http://127.0.0.1:3000";
EJS_gameID = 1;
</script> </script>
<script src='data/loader.js'></script> <script src='data/loader.js'></script>
</body> </body>

View file

@ -2804,7 +2804,7 @@ class EmulatorJS {
const body = this.createPopup("Netplay", { const body = this.createPopup("Netplay", {
"Create a Room": () => { "Create a Room": () => {
if (this.isNetplay) { if (this.isNetplay) {
console.log("close room..."); this.netplay.leaveRoom();
} else { } else {
this.netplay.showOpenRoomDialog(); this.netplay.showOpenRoomDialog();
} }
@ -2938,11 +2938,10 @@ class EmulatorJS {
} }
this.netplay.url = this.config.netplayUrl; this.netplay.url = this.config.netplayUrl;
this.netplay.getOpenRooms = async () => { this.netplay.getOpenRooms = async () => {
return {};
return JSON.parse(await (await fetch(this.netplay.url+"/list?domain="+window.location.host+"&game_id="+this.config.gameId)).text()); return JSON.parse(await (await fetch(this.netplay.url+"/list?domain="+window.location.host+"&game_id="+this.config.gameId)).text());
} }
this.netplay.updateTableList = async () => { this.netplay.updateTableList = async () => {
const addToTable = (name, current, max) => { const addToTable = (id, name, current, max) => {
const row = this.createElement("tr"); const row = this.createElement("tr");
row.classList.add("ejs_netplay_table_row"); row.classList.add("ejs_netplay_table_row");
const addToHeader = (text) => { const addToHeader = (text) => {
@ -2966,6 +2965,9 @@ class EmulatorJS {
join.style["background-color"] = "rgba(var(--ejs-primary-color),1)"; join.style["background-color"] = "rgba(var(--ejs-primary-color),1)";
join.innerText = "Join"; join.innerText = "Join";
parent.appendChild(join); parent.appendChild(join);
this.addEventListener(join, "click", (e) => {
this.netplay.joinRoom(id, name);
})
return join; return join;
} }
} }
@ -2973,7 +2975,7 @@ class EmulatorJS {
const open = await this.netplay.getOpenRooms(); const open = await this.netplay.getOpenRooms();
//console.log(open); //console.log(open);
for (const k in open) { for (const k in open) {
addToTable(open[k].room_name, open[k].current, open[k].max);//todo: password addToTable(k, open[k].room_name, open[k].current, open[k].max);//todo: password
} }
} }
this.netplay.showOpenRoomDialog = () => { this.netplay.showOpenRoomDialog = () => {
@ -3046,7 +3048,7 @@ class EmulatorJS {
popup.appendChild(submit); popup.appendChild(submit);
this.addEventListener(submit, "click", (e) => { this.addEventListener(submit, "click", (e) => {
if (!rninput.value.trim()) return; if (!rninput.value.trim()) return;
this.netplay.openRoom(rninput.value.trim(), maxinput.value, pwinput.value.trim()); this.netplay.openRoom(rninput.value.trim(), parseInt(maxinput.value), pwinput.value.trim());
popups[0].remove(); popups[0].remove();
}) })
const close = this.createElement("button"); const close = this.createElement("button");
@ -3059,8 +3061,21 @@ class EmulatorJS {
popups[0].remove(); popups[0].remove();
}) })
} }
this.netplay.startSocketIO = (callback) => {
this.netplay.socket = io(this.netplay.url);
this.netplay.socket.on("connect", () => callback());
this.netplay.socket.on("users-updated", (users) => {
console.log(users);
this.netplay.players = users;
this.netplay.updatePlayersTable();
})
this.netplay.socket.on("disconnect", () => this.netplay.roomLeft());
this.netplay.socket.on("data-message", (data) => {
this.netplay.dataMessage(data);
})
}
this.netplay.openRoom = (roomName, maxPlayers, password) => { this.netplay.openRoom = (roomName, maxPlayers, password) => {
const roomId = guidGenerator();//Server will do this const sessionid = guidGenerator();
this.netplay.playerID = guidGenerator(); this.netplay.playerID = guidGenerator();
this.netplay.players = {}; this.netplay.players = {};
this.netplay.extra = { this.netplay.extra = {
@ -3068,16 +3083,57 @@ class EmulatorJS {
game_id: this.config.gameId, game_id: this.config.gameId,
room_name: roomName, room_name: roomName,
player_name: this.netplay.name, player_name: this.netplay.name,
playerId: this.netplay.playerID, userid: this.netplay.playerID,
roomId: roomId sessionid: sessionid
} }
this.netplay.players[this.netplay.playerID] = this.netplay.extra; this.netplay.players[this.netplay.playerID] = this.netplay.extra;
this.netplay.roomJoined(true, roomName, maxPlayers, password, roomId);
this.netplay.startSocketIO((error) => {
this.netplay.socket.emit("open-room", {
extra: this.netplay.extra,
maxPlayers: maxPlayers,
password: password
}, (error) => {
if (error) {
console.log("error: ", error);
return;
} }
this.netplay.joinRoom = (sessionId) => { this.netplay.roomJoined(true, roomName, password, sessionid);
//this.netplay.roomJoined(false); })
});
} }
this.netplay.roomJoined = (isOwner, roomName, maxPlayers, password, roomId) => { this.netplay.leaveRoom = () => {
this.netplay.roomLeft();
}
this.netplay.joinRoom = (sessionid, roomName) => {
this.netplay.playerID = guidGenerator();
this.netplay.players = {};
this.netplay.extra = {
domain: window.location.host,
game_id: this.config.gameId,
room_name: roomName,
player_name: this.netplay.name,
userid: this.netplay.playerID,
sessionid: sessionid
}
this.netplay.players[this.netplay.playerID] = this.netplay.extra;
this.netplay.startSocketIO((error) => {
this.netplay.socket.emit("join-room", {
extra: this.netplay.extra//,
//password: password
}, (error, users) => {
if (error) {
console.log("error: ", error);
return;
}
this.netplay.players = users;
//this.netplay.roomJoined(false, roomName, password, sessionid);
this.netplay.roomJoined(false, roomName, "", sessionid);
})
});
}
this.netplay.roomJoined = (isOwner, roomName, password, roomId) => {
//Will already assume this.netplay.players has been refreshed //Will already assume this.netplay.players has been refreshed
this.isNetplay = true; this.isNetplay = true;
console.log(this.netplay.extra); console.log(this.netplay.extra);
@ -3122,7 +3178,10 @@ class EmulatorJS {
this.netplay.extra = null; this.netplay.extra = null;
this.netplay.playerID = null; this.netplay.playerID = null;
this.netplay.createButton.innerText = "Create a Room"; this.netplay.createButton.innerText = "Create a Room";
this.netplay.socket.disconnect();
}
this.netplay.dataMessage = (data) => {
console.log(data);
} }
this.netplay.updateList = { this.netplay.updateList = {

View file

@ -40,6 +40,7 @@
await loadScript('storage.js'); await loadScript('storage.js');
await loadScript('gamepad.js'); await loadScript('gamepad.js');
await loadScript('GameManager.js'); await loadScript('GameManager.js');
await loadScript('socket.io.min.js');
await loadStyle('css/main.css'); await loadStyle('css/main.css');
} }
const config = {}; const config = {};

7
data/socket.io.min.js vendored Normal file

File diff suppressed because one or more lines are too long