diff --git a/Source/Services/Room.js b/Source/Services/Room.js index 302398b..924d3f4 100644 --- a/Source/Services/Room.js +++ b/Source/Services/Room.js @@ -361,6 +361,126 @@ addService(({ } break; } + case 'accept/invite-room':{ + let {roomId, clientId} = message; + // Odanın varlığının kontrolü + if(!Room.rooms.has(roomId)) + { + end({ + status : "fail", + message : "NOT-FOUND-ROOM" + }) + }; + let room = Room.rooms.get(roomId); + + // erişim kontrolü + if(!client.rooms.has(room.id)) + { + return end({ + status : "fail", + message : "FORBIDDEN-INVITE-ACTIONS" + }) + } + + // Odaya katılma şeklinin doğruluğu + if(room.joinType == 'invite') + { + return end({ + status : "fail", + message : "INVALID-DATA" + }) + }; + // Odaya katılma talebinin doğruluğu + if(!room.waitingInvited.includes(clientId)) + { + return end({ + status : "fail", + message : "NO-WAITING-INVITED" + }) + }; + // Odaya katılan kişinin varlığı + if(!Client.clients.has(clientId)) + { + return end({ + status : "fail", + message : "NO-CLIENT" + }) + }; + + // Odaya kişiyi kabul etme + let JoinClient = Client.clients.get(clientId) + + room.join(JoinClient); + + JoinClient.send([{ + status:"accepted" + },'room/invite/status']); + + return end({ + status : "success" + }); + } + case 'reject/invite-room':{ + let {roomId, clientId} = message; + // Odanın varlığının kontrolü + if(!Room.rooms.has(roomId)) + { + end({ + status : "fail", + message : "NOT-FOUND-ROOM" + }) + }; + let room = Room.rooms.get(roomId); + + // erişim kontrolü + if(!client.rooms.has(room.id)) + { + return end({ + status : "fail", + message : "FORBIDDEN-INVITE-ACTIONS" + }) + } + + // Odaya katılma şeklinin doğruluğu + if(room.joinType == 'invite') + { + return end({ + status : "fail", + message : "INVALID-DATA" + }) + }; + // Odaya katılma talebinin doğruluğu + if(!room.waitingInvited.includes(clientId)) + { + return end({ + status : "fail", + message : "NO-WAITING-INVITED" + }) + }; + // Odaya katılan kişinin varlığı + if(!Client.clients.has(clientId)) + { + return end({ + status : "fail", + message : "NO-CLIENT" + }) + }; + + // Odaya davet edilen kişiyi reddetme + let JoinClient = Client.clients.get(clientId) + + room.waitingInvited = room.waitingInvited.filter(e => e != clientId); + + room.send([{id:clientId,roomId:room.id},'room/invite/status']) + + JoinClient.send([{ + status:"rejected" + },'room/invite/status']); + + return end({ + status : "success" + }); + } default:{ next(); }