| @@ -54,6 +54,22 @@ namespace Server | |||||
| semaDict.Add(request.PlayerId, temp); | 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; | return; | ||||
| } | } | ||||
| @@ -112,9 +128,19 @@ namespace Server | |||||
| #if DEBUG | #if DEBUG | ||||
| Console.WriteLine($"Attack ID: {request.PlayerId}"); | Console.WriteLine($"Attack ID: {request.PlayerId}"); | ||||
| #endif | #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]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| game.Attack(gameID, request.Angle); | game.Attack(gameID, request.Angle); | ||||
| BoolRes boolRes = new(); | |||||
| boolRes.ActSuccess = true; | boolRes.ActSuccess = true; | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| } | } | ||||
| @@ -125,8 +151,18 @@ namespace Server | |||||
| #if DEBUG | #if DEBUG | ||||
| Console.WriteLine($"Move ID: {request.PlayerId}, TimeInMilliseconds: {request.TimeInMilliseconds}"); | Console.WriteLine($"Move ID: {request.PlayerId}, TimeInMilliseconds: {request.TimeInMilliseconds}"); | ||||
| #endif | #endif | ||||
| var gameID = communicationToGameID[request.PlayerId]; | |||||
| MoveRes moveRes = new(); | 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(gameID, (int)request.TimeInMilliseconds, request.Angle); | ||||
| // 之后game.MovePlayer可能改为bool类 | // 之后game.MovePlayer可能改为bool类 | ||||
| moveRes.ActSuccess = true; | moveRes.ActSuccess = true; | ||||
| @@ -137,6 +173,11 @@ namespace Server | |||||
| public override Task<BoolRes> SendMessage(SendMsg request, ServerCallContext context) | public override Task<BoolRes> SendMessage(SendMsg request, ServerCallContext context) | ||||
| { | { | ||||
| var boolRes = new BoolRes(); | var boolRes = new BoolRes(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| if (!ValidPlayerID(request.PlayerId) || !ValidPlayerID(request.ToPlayerId) | if (!ValidPlayerID(request.PlayerId) || !ValidPlayerID(request.ToPlayerId) | ||||
| || PlayerIDToTeamID(request.PlayerId) != PlayerIDToTeamID(request.ToPlayerId) || request.PlayerId == request.ToPlayerId) | || PlayerIDToTeamID(request.PlayerId) != PlayerIDToTeamID(request.ToPlayerId) || request.PlayerId == request.ToPlayerId) | ||||
| { | { | ||||
| @@ -174,6 +215,11 @@ namespace Server | |||||
| Console.WriteLine($"PickProp ID: {request.PlayerId}"); | Console.WriteLine($"PickProp ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.PickProp(gameID, CopyInfo.ToPropType(request.PropType)); | boolRes.ActSuccess = game.PickProp(gameID, CopyInfo.ToPropType(request.PropType)); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -185,6 +231,11 @@ namespace Server | |||||
| Console.WriteLine($"UseProp ID: {request.PlayerId}"); | Console.WriteLine($"UseProp ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| game.UseProp(gameID, CopyInfo.ToPropType(request.PropType)); | game.UseProp(gameID, CopyInfo.ToPropType(request.PropType)); | ||||
| boolRes.ActSuccess = true; | boolRes.ActSuccess = true; | ||||
| @@ -196,6 +247,11 @@ namespace Server | |||||
| Console.WriteLine($"ThrowProp ID: {request.PlayerId}"); | Console.WriteLine($"ThrowProp ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| game.ThrowProp(gameID, CopyInfo.ToPropType(request.PropType)); | game.ThrowProp(gameID, CopyInfo.ToPropType(request.PropType)); | ||||
| boolRes.ActSuccess = true; | boolRes.ActSuccess = true; | ||||
| @@ -207,6 +263,11 @@ namespace Server | |||||
| Console.WriteLine($"UseSkill ID: {request.PlayerId}"); | Console.WriteLine($"UseSkill ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.UseActiveSkill(gameID, request.SkillId); | boolRes.ActSuccess = game.UseActiveSkill(gameID, request.SkillId); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -218,6 +279,11 @@ namespace Server | |||||
| Console.WriteLine($"Graduate ID: {request.PlayerId}"); | Console.WriteLine($"Graduate ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.Escape(gameID); | boolRes.ActSuccess = game.Escape(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -228,9 +294,22 @@ namespace Server | |||||
| Console.WriteLine($"StartRescueMate ID: {request.PlayerId}"); | Console.WriteLine($"StartRescueMate ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | 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); | return Task.FromResult(boolRes); | ||||
| } | } | ||||
| public override Task<BoolRes> StartTreatMate(TreatAndRescueMsg request, ServerCallContext context) | public override Task<BoolRes> StartTreatMate(TreatAndRescueMsg request, ServerCallContext context) | ||||
| @@ -239,9 +318,22 @@ namespace Server | |||||
| Console.WriteLine($"StartTreatMate ID: {request.PlayerId}"); | Console.WriteLine($"StartTreatMate ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | 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); | return Task.FromResult(boolRes); | ||||
| } | } | ||||
| public override Task<BoolRes> StartLearning(IDMsg request, ServerCallContext context) | public override Task<BoolRes> StartLearning(IDMsg request, ServerCallContext context) | ||||
| @@ -250,6 +342,11 @@ namespace Server | |||||
| Console.WriteLine($"StartLearning ID: {request.PlayerId}"); | Console.WriteLine($"StartLearning ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.Fix(gameID); | boolRes.ActSuccess = game.Fix(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -260,6 +357,11 @@ namespace Server | |||||
| Console.WriteLine($"StartOpenChest ID: {request.PlayerId}"); | Console.WriteLine($"StartOpenChest ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.OpenChest(gameID); | boolRes.ActSuccess = game.OpenChest(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -271,6 +373,11 @@ namespace Server | |||||
| Console.WriteLine($"StartOpenGate ID: {request.PlayerId}"); | Console.WriteLine($"StartOpenGate ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.OpenDoorway(gameID); | boolRes.ActSuccess = game.OpenDoorway(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -281,6 +388,11 @@ namespace Server | |||||
| Console.WriteLine($"OpenDoor ID: {request.PlayerId}"); | Console.WriteLine($"OpenDoor ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.LockOrOpenDoor(gameID); | boolRes.ActSuccess = game.LockOrOpenDoor(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -292,6 +404,11 @@ namespace Server | |||||
| Console.WriteLine($"CloseDoor ID: {request.PlayerId}"); | Console.WriteLine($"CloseDoor ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.LockOrOpenDoor(gameID); | boolRes.ActSuccess = game.LockOrOpenDoor(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -303,6 +420,11 @@ namespace Server | |||||
| Console.WriteLine($"EndAllAction ID: {request.PlayerId}"); | Console.WriteLine($"EndAllAction ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.Stop(gameID); | boolRes.ActSuccess = game.Stop(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||
| @@ -315,6 +437,11 @@ namespace Server | |||||
| Console.WriteLine($"SkipWindow ID: {request.PlayerId}"); | Console.WriteLine($"SkipWindow ID: {request.PlayerId}"); | ||||
| #endif | #endif | ||||
| BoolRes boolRes = new(); | BoolRes boolRes = new(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| { | |||||
| boolRes.ActSuccess = false; | |||||
| return Task.FromResult(boolRes); | |||||
| } | |||||
| var gameID = communicationToGameID[request.PlayerId]; | var gameID = communicationToGameID[request.PlayerId]; | ||||
| boolRes.ActSuccess = game.ClimbingThroughWindow(gameID); | boolRes.ActSuccess = game.ClimbingThroughWindow(gameID); | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||