diff --git a/logic/Server/RpcServices.cs b/logic/Server/RpcServices.cs index 6316e32..e5601f5 100644 --- a/logic/Server/RpcServices.cs +++ b/logic/Server/RpcServices.cs @@ -54,6 +54,22 @@ namespace Server semaDict.Add(request.PlayerId, temp); } } + do + { + semaDict[request.PlayerId].Item1.Wait(); + try + { + if (currentGameInfo != null) + { + await responseStream.WriteAsync(currentGameInfo); + //Console.WriteLine("Send!"); + } + } + finally + { + semaDict[request.PlayerId].Item2.Release(); + } + } while (game.GameMap.Timer.IsGaming); return; } @@ -112,9 +128,19 @@ namespace Server #if DEBUG Console.WriteLine($"Attack ID: {request.PlayerId}"); #endif + BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } + if (request.Angle == double.NaN) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; game.Attack(gameID, request.Angle); - BoolRes boolRes = new(); boolRes.ActSuccess = true; return Task.FromResult(boolRes); } @@ -125,8 +151,18 @@ namespace Server #if DEBUG Console.WriteLine($"Move ID: {request.PlayerId}, TimeInMilliseconds: {request.TimeInMilliseconds}"); #endif - var gameID = communicationToGameID[request.PlayerId]; MoveRes moveRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + moveRes.ActSuccess = false; + return Task.FromResult(moveRes); + } + if (request.Angle == double.NaN) + { + moveRes.ActSuccess = false; + return Task.FromResult(moveRes); + } + var gameID = communicationToGameID[request.PlayerId]; game.MovePlayer(gameID, (int)request.TimeInMilliseconds, request.Angle); // 之后game.MovePlayer可能改为bool类 moveRes.ActSuccess = true; @@ -137,6 +173,11 @@ namespace Server public override Task SendMessage(SendMsg request, ServerCallContext context) { var boolRes = new BoolRes(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } if (!ValidPlayerID(request.PlayerId) || !ValidPlayerID(request.ToPlayerId) || PlayerIDToTeamID(request.PlayerId) != PlayerIDToTeamID(request.ToPlayerId) || request.PlayerId == request.ToPlayerId) { @@ -174,6 +215,11 @@ namespace Server Console.WriteLine($"PickProp ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.PickProp(gameID, CopyInfo.ToPropType(request.PropType)); return Task.FromResult(boolRes); @@ -185,6 +231,11 @@ namespace Server Console.WriteLine($"UseProp ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; game.UseProp(gameID, CopyInfo.ToPropType(request.PropType)); boolRes.ActSuccess = true; @@ -196,6 +247,11 @@ namespace Server Console.WriteLine($"ThrowProp ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; game.ThrowProp(gameID, CopyInfo.ToPropType(request.PropType)); boolRes.ActSuccess = true; @@ -207,6 +263,11 @@ namespace Server Console.WriteLine($"UseSkill ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.UseActiveSkill(gameID, request.SkillId); return Task.FromResult(boolRes); @@ -218,6 +279,11 @@ namespace Server Console.WriteLine($"Graduate ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.Escape(gameID); return Task.FromResult(boolRes); @@ -228,9 +294,22 @@ namespace Server Console.WriteLine($"StartRescueMate ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; - var toGameID = communicationToGameID[request.ToPlayerId]; - boolRes.ActSuccess = game.Rescue(gameID, toGameID); + if (request.ToPlayerId >= 0 && request.ToPlayerId < options.MaxStudentCount) + { + var toGameID = communicationToGameID[request.ToPlayerId]; + boolRes.ActSuccess = game.Rescue(gameID, toGameID); + } + else + { + boolRes.ActSuccess = game.Rescue(gameID); + } + return Task.FromResult(boolRes); } public override Task StartTreatMate(TreatAndRescueMsg request, ServerCallContext context) @@ -239,9 +318,22 @@ namespace Server Console.WriteLine($"StartTreatMate ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; - var toGameID = communicationToGameID[request.ToPlayerId]; - boolRes.ActSuccess = game.Treat(gameID, toGameID); + if (request.ToPlayerId >= 0 && request.ToPlayerId < options.MaxStudentCount) + { + var toGameID = communicationToGameID[request.ToPlayerId]; + boolRes.ActSuccess = game.Treat(gameID, toGameID); + } + else + { + boolRes.ActSuccess = game.Treat(gameID); + } + return Task.FromResult(boolRes); } public override Task StartLearning(IDMsg request, ServerCallContext context) @@ -250,6 +342,11 @@ namespace Server Console.WriteLine($"StartLearning ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.Fix(gameID); return Task.FromResult(boolRes); @@ -260,6 +357,11 @@ namespace Server Console.WriteLine($"StartOpenChest ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.OpenChest(gameID); return Task.FromResult(boolRes); @@ -271,6 +373,11 @@ namespace Server Console.WriteLine($"StartOpenGate ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.OpenDoorway(gameID); return Task.FromResult(boolRes); @@ -281,6 +388,11 @@ namespace Server Console.WriteLine($"OpenDoor ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.LockOrOpenDoor(gameID); return Task.FromResult(boolRes); @@ -292,6 +404,11 @@ namespace Server Console.WriteLine($"CloseDoor ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.LockOrOpenDoor(gameID); return Task.FromResult(boolRes); @@ -303,6 +420,11 @@ namespace Server Console.WriteLine($"EndAllAction ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.Stop(gameID); return Task.FromResult(boolRes); @@ -315,6 +437,11 @@ namespace Server Console.WriteLine($"SkipWindow ID: {request.PlayerId}"); #endif BoolRes boolRes = new(); + if (request.PlayerId >= spectatorMinPlayerID) + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } var gameID = communicationToGameID[request.PlayerId]; boolRes.ActSuccess = game.ClimbingThroughWindow(gameID); return Task.FromResult(boolRes);