Browse Source

feat: achieve all rpc services

tags/0.1.0
gsy1519 2 years ago
parent
commit
0c2534be90
7 changed files with 198 additions and 32 deletions
  1. +1
    -1
      dependency/proto/Services.proto
  2. +0
    -0
      logic.thuaipb
  3. +1
    -1
      logic/Preparation/Utility/GameData.cs
  4. +3
    -0
      logic/Server/ArgumentOption.cs
  5. +32
    -8
      logic/Server/CopyInfo.cs
  6. +160
    -21
      logic/Server/GameServer.cs
  7. +1
    -1
      logic/Server/Properties/launchSettings.json

+ 1
- 1
dependency/proto/Services.proto View File

@@ -21,7 +21,7 @@ service AvailableService
// rpc GetMessage (IDMsg) returns (stream MsgRes);
rpc StartLearning (IDMsg) returns (BoolRes); // 开始修理机器
rpc StartRescueMate (IDMsg) returns (BoolRes); // 开始救人
rpc StartTreatMate (IDMsg) returns (BoolRes);
rpc StartTreatMate (IDMsg) returns (BoolRes); // 开始治疗
rpc Attack (AttackMsg) returns (BoolRes); // 攻击
rpc Graduate (IDMsg) returns (BoolRes); // 相当于逃跑
rpc OpenDoor (IDMsg) returns (BoolRes); // 开门


+ 0
- 0
logic.thuaipb View File


+ 1
- 1
logic/Preparation/Utility/GameData.cs View File

@@ -22,7 +22,7 @@ namespace Preparation.Utility
public const int cols = 50; // 列数

public const int numOfBirthPoint = 5;
// public const int numOfGenerator = 9;
public const int numOfGenerator = 9;
public const int numOfChest = 8;

private const int numOfObjNotMap = 5;


+ 3
- 0
logic/Server/ArgumentOption.cs View File

@@ -15,6 +15,9 @@ namespace Server
[Option('p', "port", Required = true, HelpText = "Server listening port")]
public ushort ServerPort { get; set; } = 10086;

[Option('n', "playerNum", Required = false, HelpText = "The number of teams, 1 by defualt")]
public ushort playerNum { get; set; } = 1;

[Option('t', "teamCount", Required = false, HelpText = "The number of teams, 1 by defualt")]
public ushort TeamCount { get; set; } = 1;



+ 32
- 8
logic/Server/CopyInfo.cs View File

@@ -9,7 +9,7 @@ namespace Server

public static class CopyInfo
{
private static Protobuf.PlaceType ToPlaceType(Preparation.Utility.PlaceType place)
public static Protobuf.PlaceType ToPlaceType(Preparation.Utility.PlaceType place)
{
switch (place)
{
@@ -44,7 +44,7 @@ namespace Server
return Protobuf.PlaceType.NullPlaceType;
}
}
private static Protobuf.PropType ToPropType(Preparation.Utility.PropType prop)
public static Protobuf.PropType ToPropType(Preparation.Utility.PropType prop)
{
switch (prop)
{
@@ -67,7 +67,31 @@ namespace Server
}
}

private static Protobuf.PlayerState ToPlayerState(Preparation.Utility.PlayerStateType playerState)
public static Preparation.Utility.PropType ToPropType(Protobuf.PropType prop)
{
switch (prop)
{
case Protobuf.PropType.AddSpeed:
return Preparation.Utility.PropType.AddSpeed;
case Protobuf.PropType.AddLifeOrAp:
return Preparation.Utility.PropType.AddLifeOrAp;
case Protobuf.PropType.AddHpOrAp:
return Preparation.Utility.PropType.AddHpOrAp;
case Protobuf.PropType.ShieldOrSpear:
return Preparation.Utility.PropType.ShieldOrSpear;
case Protobuf.PropType.Key3:
return Preparation.Utility.PropType.Key3;
case Protobuf.PropType.Key5:
return Preparation.Utility.PropType.Key5;
case Protobuf.PropType.Key6:
return Preparation.Utility.PropType.Key6;
default:
return Preparation.Utility.PropType.Null;
}
}


public static Protobuf.PlayerState ToPlayerState(Preparation.Utility.PlayerStateType playerState)
{
switch (playerState)
{
@@ -110,7 +134,7 @@ namespace Server
return PlayerState.NullStatus;
}
}
private static Protobuf.StudentBuffType ToStudentBuffType(Preparation.Utility.BuffType buffType)
public static Protobuf.StudentBuffType ToStudentBuffType(Preparation.Utility.BuffType buffType)
{
switch (buffType)
{
@@ -119,7 +143,7 @@ namespace Server
return Protobuf.StudentBuffType.NullSbuffType;
}
}
private static Protobuf.TrickerBuffType ToTrickerBuffType(Preparation.Utility.BuffType buffType)
public static Protobuf.TrickerBuffType ToTrickerBuffType(Preparation.Utility.BuffType buffType)
{
switch (buffType)
{
@@ -128,7 +152,7 @@ namespace Server
return Protobuf.TrickerBuffType.NullTbuffType;
}
}
private static Protobuf.BulletType ToBulletType(Preparation.Utility.BulletType bulletType)
public static Protobuf.BulletType ToBulletType(Preparation.Utility.BulletType bulletType)
{
switch (bulletType)
{
@@ -141,7 +165,7 @@ namespace Server
}
}

private static Protobuf.StudentType ToStudentType(Preparation.Utility.CharacterType characterType)
public static Protobuf.StudentType ToStudentType(Preparation.Utility.CharacterType characterType)
{
switch (characterType)
{
@@ -151,7 +175,7 @@ namespace Server
return Protobuf.StudentType.NullStudentType;
}
}
private static Protobuf.TrickerType ToTrickerType(Preparation.Utility.CharacterType characterType)
public static Protobuf.TrickerType ToTrickerType(Preparation.Utility.CharacterType characterType)
{
switch (characterType)
{


+ 160
- 21
logic/Server/GameServer.cs View File

@@ -20,14 +20,14 @@ namespace Server
protected readonly ArgumentOptions options;
private HttpSender? httpSender;
private object gameLock = new();
private const int playerNum = 1; // 注意修改
private int playerNum => options.playerNum; // 注意修改
private MessageToClient currentGameInfo = new();
private MessageOfObj currentMapMsg = new();
private object newsLock = new();
private List<MessageOfNews> currentNews = new();
private SemaphoreSlim endGameSem = new(0);
protected readonly Game game;
private uint spectatorMinPlayerID = 2022;
private uint spectatorMinPlayerID = 2023;
private List<uint> spectatorList = new List<uint>();
public int TeamCount => options.TeamCount;
protected long[] communicationToGameID; // 通信用的ID映射到游戏内的ID,通信中0-3为Student,4为Tricker
@@ -115,7 +115,7 @@ namespace Server
mwr?.Flush();
if (options.ResultFileName != DefaultArgumentOptions.FileName)
SaveGameResult(options.ResultFileName + ".json");
//SendGameResult();
SendGameResult();
this.endGameSem.Release();
}

@@ -186,7 +186,7 @@ namespace Server
private int PlayerIDToTeamID(long playerID)
{
if (0 <= playerID && playerID < options.PlayerCountPerTeam) return 0;
if (playerID == options.PlayerCountPerTeam) return 1;
if (playerID == 4) return 1;
return -1;
}
private uint GetBirthPointIdx(long playerID) // 获取出生点位置
@@ -200,6 +200,35 @@ namespace Server
return false;
}

private MessageOfAll GetMessageOfAll()
{
MessageOfAll msg = new MessageOfAll();
//msg.GameTime
msg.SubjectLeft = GameData.numOfGeneratorRequiredForRepair - (int)game.GameMap.NumOfRepairedGenerators;
//msg.StudentGraduated
//msg.StudentQuited
msg.StudentScore = 0;
msg.TrickerScore = 0;
game.GameMap.GameObjLockDict[GameObjType.Character].EnterReadLock();
try
{
foreach (Character character in game.GameMap.GameObjDict[GameObjType.Character])
{
if (!character.IsGhost()) msg.StudentScore += character.Score;
else msg.TrickerScore += character.Score;
}

}
finally
{
game.GameMap.GameObjLockDict[GameObjType.Character].ExitReadLock();
}
//msg.GateOpened =
//msg.HiddenGateRefreshed =
//msg.HiddenGateOpened
return msg;
}

private Protobuf.PlaceType IntToPlaceType(uint n)
{
switch (n)
@@ -234,7 +263,9 @@ namespace Server
}
public override Task<BoolRes> TryConnection(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"TryConnection ID: {request.PlayerId}");
#endif
var onConnection = new BoolRes();
lock (gameLock)
{
@@ -326,6 +357,9 @@ namespace Server

public override Task<BoolRes> Attack(AttackMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"Attack ID: {request.PlayerId}");
#endif
var gameID = communicationToGameID[request.PlayerId];
game.Attack(gameID, request.Angle);
BoolRes boolRes = new();
@@ -347,17 +381,7 @@ namespace Server
if (!game.GameMap.Timer.IsGaming) moveRes.ActSuccess = false;
return Task.FromResult(moveRes);
}

public override Task<BoolRes> PickProp(PropMsg request, ServerCallContext context)
{
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
if (request.PropType == Protobuf.PropType.NullPropType)
boolRes.ActSuccess = game.PickProp(gameID, Preparation.Utility.PropType.Null);
// 待修改
return Task.FromResult(boolRes);
}

public override Task<BoolRes> SendMessage(SendMsg request, ServerCallContext context)
{
var boolRes = new BoolRes();
@@ -388,31 +412,81 @@ namespace Server
#if DEBUG
Console.WriteLine(news.News);
#endif
//teamCommunicatonMsg[request.ToPlayerId].Enqueue(msg);
}
boolRes.ActSuccess = true;
return Task.FromResult(boolRes);
}
public override Task<BoolRes> PickProp(PropMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"PickProp ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.PickProp(gameID, CopyInfo.ToPropType(request.PropType));
return Task.FromResult(boolRes);
}

public override Task<BoolRes> UseProp(PropMsg request, ServerCallContext context)
{
return base.UseProp(request, context);
#if DEBUG
Console.WriteLine($"UseProp ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
//boolRes.ActSuccess = game.UseProp(gameID, CopyInfo.ToPropType(request.PropType));
return Task.FromResult(boolRes);
}
public override Task<BoolRes> ThrowProp(PropMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"ThrowProp ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
//boolRes.ActSuccess = game.ThrowProp(gameID, CopyInfo.ToPropType(request.PropType));
return Task.FromResult(boolRes);
}
public override Task<BoolRes> UseSkill(SkillMsg request, ServerCallContext context)
{
return base.UseSkill(request, context);
#if DEBUG
Console.WriteLine($"UseSkill ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
//boolRes.ActSuccess = game.UseActiveSkill(gameID, CopyInfo.ToPropType(request.PropType));
return Task.FromResult(boolRes);
}

public override Task<BoolRes> Graduate(IDMsg request, ServerCallContext context)
{
return base.Graduate(request, context);
#if DEBUG
Console.WriteLine($"Graduate ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.Escape(gameID);
return Task.FromResult(boolRes);
}
public override Task<BoolRes> StartRescueMate(IDMsg request, ServerCallContext context)
{
return base.StartRescueMate(request, context);
#if DEBUG
Console.WriteLine($"StartRescueMate ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
//boolRes.ActSuccess = game.Rescue(gameID);
return Task.FromResult(boolRes);
}
public override Task<BoolRes> StartTreatMate(IDMsg request, ServerCallContext context)
{
return base.StartTreatMate(request, context);
#if DEBUG
Console.WriteLine($"StartTreatMate ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
//boolRes.ActSuccess = game.Treat(gameID);
return Task.FromResult(boolRes);
}
public override Task<BoolRes> StartLearning(IDMsg request, ServerCallContext context)
{
@@ -424,6 +498,71 @@ namespace Server
boolRes.ActSuccess = game.Fix(gameID);
return Task.FromResult(boolRes);
}
public override Task<BoolRes> StartOpenChest(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"StartOpenChest ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.OpenChest(gameID);
return Task.FromResult(boolRes);
}

public override Task<BoolRes> StartOpenGate(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"StartOpenGate ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.OpenDoorway(gameID);
return Task.FromResult(boolRes);
}
public override Task<BoolRes> OpenDoor(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"OpenDoor ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.LockOrOpenDoor(gameID);
return Task.FromResult(boolRes);
}

public override Task<BoolRes> CloseDoor(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"CloseDoor ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.LockOrOpenDoor(gameID);
return Task.FromResult(boolRes);
}

public override Task<BoolRes> EndAllAction(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"EndAllAction ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.Stop(gameID);
return Task.FromResult(boolRes);
}

public override Task<BoolRes> SkipWindow(IDMsg request, ServerCallContext context)
{
#if DEBUG
Console.WriteLine($"SkipWindow ID: {request.PlayerId}");
#endif
BoolRes boolRes = new();
var gameID = communicationToGameID[request.PlayerId];
boolRes.ActSuccess = game.ClimbingThroughWindow(gameID);
return Task.FromResult(boolRes);
}

public GameServer(ArgumentOptions options)
{


+ 1
- 1
logic/Server/Properties/launchSettings.json View File

@@ -2,7 +2,7 @@
"profiles": {
"Server": {
"commandName": "Project",
"commandLineArgs": "-p 8888\r\n-f playback\r\n-g 600\r\n-b true\r\n-c 4\r\n-t 2"
"commandLineArgs": "-p 8888\r\n-f playback\r\n-g 600\r\n-b true\r\n-c 4\r\n-t 2\r\n-n 1"
}
}
}

Loading…
Cancel
Save