diff --git a/server/MultiplayerMatch.js b/server/MultiplayerMatch.js index ec61f53..143f792 100644 --- a/server/MultiplayerMatch.js +++ b/server/MultiplayerMatch.js @@ -142,7 +142,7 @@ module.exports = class { } } - updateMatch(MatchData) { + updateMatch(MatchUser, MatchData) { // Update match with new data this.inProgress = MatchData.inProgress; @@ -221,7 +221,7 @@ module.exports = class { global.StreamsHandler.sendToStream(this.matchStreamName, osuPacketWriter.toBuffer, null); } - setReadyState(MatchUser, ReadyState) { + setStateReady(MatchUser) { // Get the match the user is in const osuPacketWriter = new osu.Bancho.Writer; @@ -230,9 +230,29 @@ module.exports = class { const slot = this.slots[i]; // Check if the player in this slot is this user if (slot.playerId == MatchUser.id) { - // Turn on or off the user's ready state - if (ReadyState) slot.status = 8; // Ready - else slot.status = 4; // Not Ready + // Turn on the user's ready state + slot.status = 8; // Ready + break; + } + } + + osuPacketWriter.MatchUpdate(this.createOsuMatchJSON()); + + // Send this update to all users in the stream + global.StreamsHandler.sendToStream(this.matchStreamName, osuPacketWriter.toBuffer, null); + } + + setStateNotReady(MatchUser) { + // Get the match the user is in + const osuPacketWriter = new osu.Bancho.Writer; + + // Loop though all slots in the match + for (let i = 0; i < this.slots.length; i++) { + const slot = this.slots[i]; + // Check if the player in this slot is this user + if (slot.playerId == MatchUser.id) { + // Turn off the user's ready state + slot.status = 4; // Not Ready break; } } @@ -364,7 +384,7 @@ module.exports = class { } } - transferHost(SlotIDToTransferTo) { + transferHost(MatchUser, SlotIDToTransferTo) { const osuPacketWriter = new osu.Bancho.Writer; // Set the lobby's host to the new user diff --git a/server/Packets/Logout.js b/server/Packets/Logout.js index f10c02c..ce022ee 100644 --- a/server/Packets/Logout.js +++ b/server/Packets/Logout.js @@ -14,7 +14,7 @@ module.exports = function(CurrentUser) { // Remove user from user list global.removeUser(CurrentUser); - const osuPacketWriter = new osu.Bancho.Writer; + const osuPacketWriter = new osu.Bancho.Writer(); osuPacketWriter.SendMessage({ sendingClient: global.users["bot"].username, message: `User ${CurrentUser.username} has logged out.`, diff --git a/server/Packets/SendPrivateMessage.js b/server/Packets/SendPrivateMessage.js index a5932f3..be039e9 100644 --- a/server/Packets/SendPrivateMessage.js +++ b/server/Packets/SendPrivateMessage.js @@ -3,13 +3,13 @@ const osu = require("osu-packet"), module.exports = function(CurrentUser, CurrentPacket) { const osuPacketWriter = new osu.Bancho.Writer; - const userSentTo = getUserByUsername(CurrentPacket.data.target); + const userSentTo = getUserByUsername(CurrentPacket.target); if (userSentTo == null) return; osuPacketWriter.SendMessage({ sendingClient: CurrentUser.username, - message: CurrentPacket.data.message, + message: CurrentPacket.message, target: CurrentUser.username, senderId: CurrentUser.id }); diff --git a/server/Packets/SendPublicMessage.js b/server/Packets/SendPublicMessage.js index 0108ca2..8e74bf7 100644 --- a/server/Packets/SendPublicMessage.js +++ b/server/Packets/SendPublicMessage.js @@ -4,22 +4,22 @@ const osu = require("osu-packet"), module.exports = function(CurrentUser, CurrentPacket) { let isSendingChannelLocked = false; for (let i = 0; i < global.channels.length; i++) { - if (!CurrentPacket.data.target.includes("#")) break; - if (global.channels[i].channelName == CurrentPacket.data.target) { + if (!CurrentPacket.target.includes("#")) break; + if (global.channels[i].channelName == CurrentPacket.target) { isSendingChannelLocked = global.channels[i].locked; break; } } if (isSendingChannelLocked) { - if (CurrentPacket.data.message.includes("!")) { - botCommandHandler(CurrentUser, CurrentPacket.data.message, CurrentPacket.data.target); + if (CurrentPacket.message.includes("!")) { + botCommandHandler(CurrentUser, CurrentPacket.message, CurrentPacket.target); } else { const osuPacketWriter = new osu.Bancho.Writer; osuPacketWriter.SendMessage({ sendingClient: global.users["bot"].username, message: "The channel you are currently trying to send to is locked, please check back later!", - target: CurrentPacket.data.target, + target: CurrentPacket.target, senderId: global.users["bot"].id }); CurrentUser.addActionToQueue(osuPacketWriter.toBuffer); @@ -27,29 +27,30 @@ module.exports = function(CurrentUser, CurrentPacket) { return; } - global.consoleHelper.printChat(`${CurrentUser.username} in ${CurrentPacket.data.target} sent: ${CurrentPacket.data.message}`); + global.consoleHelper.printChat(`${CurrentUser.username} in ${CurrentPacket.target} sent: ${CurrentPacket.message}`); const osuPacketWriter = new osu.Bancho.Writer; osuPacketWriter.SendMessage({ sendingClient: CurrentUser.username, - message: CurrentPacket.data.message, - target: CurrentPacket.data.target, + message: CurrentPacket.message, + target: CurrentPacket.target, senderId: CurrentUser.id }); - if (CurrentPacket.data.target == "#multiplayer") { + if (CurrentPacket.target == "#multiplayer") { global.StreamsHandler.sendToStream(CurrentUser.currentMatch.matchChatStreamName, osuPacketWriter.toBuffer, CurrentUser.uuid); - botCommandHandler(CurrentUser, CurrentPacket.data.message, CurrentUser.currentMatch.matchChatStreamName, true); + botCommandHandler(CurrentUser, CurrentPacket.message, CurrentUser.currentMatch.matchChatStreamName, true); return; } // Check the stream that we're sending to even exists - if (!global.StreamsHandler.doesStreamExist(CurrentPacket.data.target)) return; + if (!global.StreamsHandler.doesStreamExist(CurrentPacket.target)) return; // Write chat message to stream asociated with chat channel - global.StreamsHandler.sendToStream(CurrentPacket.data.target, osuPacketWriter.toBuffer, CurrentUser.uuid); - if (CurrentPacket.data.target == "#osu") - global.addChatMessage(`${CurrentUser.username}: ${CurrentPacket.data.message}`); - botCommandHandler(CurrentUser, CurrentPacket.data.message, CurrentPacket.data.target); + global.StreamsHandler.sendToStream(CurrentPacket.target, osuPacketWriter.toBuffer, CurrentUser.uuid); + if (CurrentPacket.target == "#osu") + global.addChatMessage(`${CurrentUser.username}: ${CurrentPacket.message}`); + + botCommandHandler(CurrentUser, CurrentPacket.message, CurrentPacket.target); return; } \ No newline at end of file diff --git a/server/serverHandler.js b/server/serverHandler.js index e59d05d..bc4f808 100644 --- a/server/serverHandler.js +++ b/server/serverHandler.js @@ -132,7 +132,7 @@ const ChangeAction = require("./Packets/ChangeAction.js"), TourneyMatchLeaveChannel = require("./Packets/TourneyLeaveMatchChannel.js"); const emptyBuffer = Buffer.alloc(0); - + // A class for managing everything multiplayer global.MultiplayerManager = new MultiplayerManager(); @@ -169,7 +169,7 @@ module.exports = async function(req, res) { for (let i = 0; i < PacketData.length; i++) { // Get current packet let CurrentPacket = PacketData[i]; - + // This is getting a little big, swap this out for mapped functions? // Would require some standardisation switch (CurrentPacket.id) { @@ -178,7 +178,7 @@ module.exports = async function(req, res) { break; case packetIDs.client_sendPublicMessage: - SendPublicMessage(PacketUser, CurrentPacket); + SendPublicMessage(PacketUser, CurrentPacket.data); break; case packetIDs.client_logout: @@ -206,7 +206,7 @@ module.exports = async function(req, res) { break; case packetIDs.client_sendPrivateMessage: - SendPrivateMessage(PacketUser, CurrentPacket); + SendPrivateMessage(PacketUser, CurrentPacket.data); break; case packetIDs.client_joinLobby: @@ -230,15 +230,15 @@ module.exports = async function(req, res) { break; case packetIDs.client_matchReady: - PacketUser.currentMatch.setReadyState(PacketUser, true); + PacketUser.currentMatch.setStateReady(PacketUser); break; case packetIDs.client_matchChangeSettings: - PacketUser.currentMatch.updateMatch(CurrentPacket.data); + PacketUser.currentMatch.updateMatch(PacketUser, CurrentPacket.data); break; case packetIDs.client_matchNotReady: - PacketUser.currentMatch.setReadyState(PacketUser, false); + PacketUser.currentMatch.setStateNotReady(PacketUser); break; case packetIDs.client_partMatch: @@ -263,7 +263,7 @@ module.exports = async function(req, res) { break; case packetIDs.client_matchTransferHost: - PacketUser.currentMatch.transferHost(CurrentPacket.data); + PacketUser.currentMatch.transferHost(PacketUser, CurrentPacket.data); break; case packetIDs.client_matchChangeMods: @@ -331,7 +331,7 @@ module.exports = async function(req, res) { break; case packetIDs.client_userPresenceRequest: - UserPresence(PacketUser, PacketUser.id); + UserPresence(PacketUser, PacketUser.id); // Can't really think of a way to generalize this? break; default: