| @@ -0,0 +1,3 @@ | |||
| # These are supported funding model platforms | |||
| github: [TCL606] | |||
| @@ -1,13 +0,0 @@ | |||
| name: clang-format | |||
| on: [push, pull_request] | |||
| jobs: | |||
| clang-format-checking: | |||
| runs-on: ubuntu-latest | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - uses: DoozyX/clang-format-lint-action@v0.14 | |||
| with: | |||
| source: '.' | |||
| extensions: 'cs,c,h,C,H,cpp,hpp,cc,hh,c++,h++,cxx,hxx,i,ixx,ipp,i++' | |||
| clangFormatVersion: 14 | |||
| inplace: False | |||
| @@ -0,0 +1,34 @@ | |||
| name: format | |||
| on: [push, pull_request] | |||
| jobs: | |||
| clang-format-checking: | |||
| runs-on: ubuntu-latest | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - uses: DoozyX/clang-format-lint-action@v0.14 | |||
| with: | |||
| source: '.' | |||
| extensions: 'c,h,C,H,cpp,hpp,cc,hh,c++,h++,cxx,hxx,i,ixx,ipp,i++' | |||
| clangFormatVersion: 14 | |||
| inplace: False | |||
| dotnet-format-checking: | |||
| runs-on: ubuntu-latest | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Setup .NET Core | |||
| uses: actions/setup-dotnet@v1 | |||
| with: | |||
| dotnet-version: 6.0.x | |||
| - name: Check Logic | |||
| run: dotnet format "./logic/logic.sln" --severity error --no-restore | |||
| - name: Check Installer | |||
| run: dotnet format "./installer/installer.sln" --severity error --no-restore | |||
| - name: Check Launcher | |||
| run: dotnet format "./launcher/launcher.sln" --severity error --no-restore | |||
| - name: Check Playback | |||
| run: dotnet format "./playback/playback.sln" --severity error --no-restore | |||
| @@ -34,6 +34,7 @@ public: | |||
| virtual std::shared_ptr<const THUAI6::Butcher> ButcherGetSelfInfo() const = 0; | |||
| virtual std::vector<std::vector<THUAI6::PlaceType>> GetFullMap() const = 0; | |||
| virtual THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const = 0; | |||
| // 供IAPI使用的操作相关的部分 | |||
| virtual bool Move(int64_t time, double angle) = 0; | |||
| @@ -42,17 +43,17 @@ public: | |||
| virtual bool UseSkill() = 0; | |||
| virtual bool SendMessage(int64_t toID, std::string message) = 0; | |||
| virtual bool HaveMessage() = 0; | |||
| virtual std::pair<std::string, int64_t> GetMessage() = 0; | |||
| virtual std::pair<int64_t, std::string> GetMessage() = 0; | |||
| virtual bool Escape() = 0; | |||
| // 说明:双向stream由三个函数共同实现,两个记录开始和结束,结果由Logic里的私有的成员变量记录,获得返回值则另调函数 | |||
| virtual bool StartFixMachine() = 0; | |||
| virtual bool EndFixMachine() = 0; | |||
| virtual void StartFixMachine() = 0; | |||
| virtual void EndFixMachine() = 0; | |||
| virtual bool GetFixStatus() = 0; | |||
| virtual bool StartSaveHuman() = 0; | |||
| virtual bool EndSaveHuman() = 0; | |||
| virtual void StartSaveHuman() = 0; | |||
| virtual void EndSaveHuman() = 0; | |||
| virtual bool GetSaveStatus() = 0; | |||
| virtual bool Attack(double angle) = 0; | |||
| @@ -128,11 +129,11 @@ class IHumanAPI : public IAPI | |||
| public: | |||
| /*****人类阵营的特定函数*****/ | |||
| virtual std::future<bool> StartFixMachine() = 0; | |||
| virtual std::future<bool> EndFixMachine() = 0; | |||
| virtual void StartFixMachine() = 0; | |||
| virtual void EndFixMachine() = 0; | |||
| virtual std::future<bool> GetFixStatus() = 0; | |||
| virtual std::future<bool> StartSaveHuman() = 0; | |||
| virtual std::future<bool> EndSaveHuman() = 0; | |||
| virtual void StartSaveHuman() = 0; | |||
| virtual void EndSaveHuman() = 0; | |||
| virtual std::future<bool> GetSaveStatus() = 0; | |||
| virtual std::future<bool> Escape() = 0; | |||
| [[nodiscard]] virtual std::shared_ptr<const THUAI6::Human> GetSelfInfo() const = 0; | |||
| @@ -189,12 +190,8 @@ public: | |||
| std::future<bool> UseSkill() override; | |||
| std::future<bool> SendMessage(int64_t, std::string) override; | |||
| [[nodiscard]] std::future<bool> HaveMessage() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::future<std::pair<int64_t, std::string>> GetMessage() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::future<bool> HaveMessage() override; | |||
| [[nodiscard]] std::future<std::pair<int64_t, std::string>> GetMessage() override; | |||
| std::future<bool> Wait() override | |||
| { | |||
| @@ -206,38 +203,20 @@ public: | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Prop>> GetProps() const override; | |||
| [[nodiscard]] std::vector<std::vector<THUAI6::PlaceType>> GetFullMap() const override; | |||
| [[nodiscard]] THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const override | |||
| { | |||
| } | |||
| [[nodiscard]] THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const override; | |||
| [[nodiscard]] const std::vector<int64_t> GetPlayerGUIDs() const override | |||
| { | |||
| } | |||
| std::future<bool> StartFixMachine() override | |||
| { | |||
| } | |||
| std::future<bool> EndFixMachine() override | |||
| { | |||
| } | |||
| std::future<bool> GetFixStatus() override | |||
| { | |||
| } | |||
| std::future<bool> StartSaveHuman() override | |||
| { | |||
| } | |||
| std::future<bool> EndSaveHuman() override | |||
| { | |||
| } | |||
| std::future<bool> GetSaveStatus() override | |||
| { | |||
| } | |||
| std::future<bool> Escape() override | |||
| { | |||
| } | |||
| [[nodiscard]] virtual std::shared_ptr<const THUAI6::Human> GetSelfInfo() const override | |||
| { | |||
| } | |||
| void StartFixMachine() override; | |||
| void EndFixMachine() override; | |||
| std::future<bool> GetFixStatus() override; | |||
| void StartSaveHuman() override; | |||
| void EndSaveHuman() override; | |||
| std::future<bool> GetSaveStatus() override; | |||
| std::future<bool> Escape() override; | |||
| [[nodiscard]] std::shared_ptr<const THUAI6::Human> GetSelfInfo() const override; | |||
| private: | |||
| ILogic& logic; | |||
| @@ -268,59 +247,36 @@ public: | |||
| std::future<bool> MoveUp(int64_t timeInMilliseconds) override; | |||
| std::future<bool> MoveLeft(int64_t timeInMilliseconds) override; | |||
| std::future<bool> MoveDown(int64_t timeInMilliseconds) override; | |||
| std::future<bool> PickProp(THUAI6::PropType prop) override; | |||
| std::future<bool> UseProp() override; | |||
| std::future<bool> UseSkill() override; | |||
| std::future<bool> SendMessage(int64_t, std::string) override; | |||
| [[nodiscard]] std::future<bool> HaveMessage() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::future<std::pair<int64_t, std::string>> GetMessage() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::future<bool> HaveMessage() override; | |||
| [[nodiscard]] std::future<std::pair<int64_t, std::string>> GetMessage() override; | |||
| std::future<bool> Wait() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Human>> GetHuman() const override | |||
| { | |||
| } | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Butcher>> GetButcher() const override | |||
| { | |||
| } | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Human>> GetHuman() const override; | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Butcher>> GetButcher() const override; | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Prop>> GetProps() const override | |||
| { | |||
| } | |||
| [[nodiscard]] std::vector<std::shared_ptr<const THUAI6::Prop>> GetProps() const override; | |||
| [[nodiscard]] std::vector<std::vector<THUAI6::PlaceType>> GetFullMap() const override | |||
| { | |||
| } | |||
| [[nodiscard]] THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const override | |||
| { | |||
| } | |||
| [[nodiscard]] std::vector<std::vector<THUAI6::PlaceType>> GetFullMap() const override; | |||
| [[nodiscard]] THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const override; | |||
| [[nodiscard]] const std::vector<int64_t> GetPlayerGUIDs() const override | |||
| { | |||
| } | |||
| std::future<bool> Attack(double angleInRadian) override | |||
| { | |||
| } | |||
| std::future<bool> CarryHuman() override | |||
| { | |||
| } | |||
| std::future<bool> ReleaseHuman() override | |||
| { | |||
| } | |||
| std::future<bool> HangHuman() override | |||
| { | |||
| } | |||
| [[nodiscard]] std::shared_ptr<const THUAI6::Butcher> GetSelfInfo() const override | |||
| { | |||
| } | |||
| std::future<bool> Attack(double angleInRadian) override; | |||
| std::future<bool> CarryHuman() override; | |||
| std::future<bool> ReleaseHuman() override; | |||
| std::future<bool> HangHuman() override; | |||
| [[nodiscard]] std::shared_ptr<const THUAI6::Butcher> GetSelfInfo() const override; | |||
| private: | |||
| ILogic& logic; | |||
| @@ -408,19 +364,19 @@ public: | |||
| { | |||
| } | |||
| std::future<bool> StartFixMachine() override | |||
| void StartFixMachine() override | |||
| { | |||
| } | |||
| std::future<bool> EndFixMachine() override | |||
| void EndFixMachine() override | |||
| { | |||
| } | |||
| std::future<bool> GetFixStatus() override | |||
| { | |||
| } | |||
| std::future<bool> StartSaveHuman() override | |||
| void StartSaveHuman() override | |||
| { | |||
| } | |||
| std::future<bool> EndSaveHuman() override | |||
| void EndSaveHuman() override | |||
| { | |||
| } | |||
| std::future<bool> GetSaveStatus() override | |||
| @@ -8,6 +8,7 @@ | |||
| #include "Services.pb.h" | |||
| #include <grpcpp/grpcpp.h> | |||
| #include "structures.h" | |||
| #include <thread> | |||
| class Logic; | |||
| @@ -24,17 +25,35 @@ public: | |||
| bool UseSkill(int64_t playerID); | |||
| bool SendMessage(int64_t toID, std::string message, int64_t playerID); | |||
| bool HaveMessage(int64_t playerID); | |||
| std::pair<std::string, int64_t> GetMessage(int64_t playerID); | |||
| std::pair<int64_t, std::string> GetMessage(int64_t playerID); | |||
| bool Escape(int64_t playerID); | |||
| void StartFixMachine(int64_t playerID); | |||
| void EndFixMachine(); | |||
| bool GetFixStatus(); | |||
| void StartSaveHuman(int64_t playerID); | |||
| void EndSaveHuman(); | |||
| bool GetSaveStatus(); | |||
| bool Attack(double angle, int64_t playerID); | |||
| bool CarryHuman(int64_t playerID); | |||
| bool ReleaseHuman(int64_t playerID); | |||
| bool HangHuman(int64_t playerID); | |||
| bool TryConnection(int64_t playerID); | |||
| protobuf::MessageToClient GetMessage2Client(); | |||
| bool HaveMessage2Client(); | |||
| void AddPlayer(int64_t playerID, THUAI6::PlayerType playerType, THUAI6::HumanType humanType, THUAI6::ButcherType butcherType); | |||
| private: | |||
| void FixMachine(int64_t playerID); | |||
| void SaveHuman(int64_t playerID); | |||
| std::unique_ptr<protobuf::AvailableService::Stub> THUAI6Stub; | |||
| bool haveNewMessage = false; | |||
| protobuf::MessageToClient message2Client; | |||
| bool isFixing = false; | |||
| bool isSaving = false; | |||
| }; | |||
| #endif | |||
| @@ -90,6 +90,7 @@ private: | |||
| std::shared_ptr<const THUAI6::Butcher> ButcherGetSelfInfo() const override; | |||
| std::vector<std::vector<THUAI6::PlaceType>> GetFullMap() const override; | |||
| THUAI6::PlaceType GetPlaceType(int32_t CellX, int32_t CellY) const override; | |||
| // 供IAPI使用的操作相关的部分 | |||
| bool Move(int64_t time, double angle) override; | |||
| @@ -98,43 +99,23 @@ private: | |||
| bool UseSkill() override; | |||
| bool SendMessage(int64_t toID, std::string message) override; | |||
| bool HaveMessage() override; | |||
| std::pair<std::string, int64_t> GetMessage() override; | |||
| std::pair<int64_t, std::string> GetMessage() override; | |||
| bool Escape() override; | |||
| // 说明:双向stream由三个函数共同实现,两个记录开始和结束,结果由Logic里的私有的成员变量记录,获得返回值则另调函数 | |||
| bool StartFixMachine() override | |||
| { | |||
| } | |||
| bool EndFixMachine() override | |||
| { | |||
| } | |||
| bool GetFixStatus() override | |||
| { | |||
| } | |||
| bool StartSaveHuman() override | |||
| { | |||
| } | |||
| bool EndSaveHuman() override | |||
| { | |||
| } | |||
| bool GetSaveStatus() override | |||
| { | |||
| } | |||
| bool Attack(double angle) override | |||
| { | |||
| } | |||
| bool CarryHuman() override | |||
| { | |||
| } | |||
| bool ReleaseHuman() override | |||
| { | |||
| } | |||
| bool HangHuman() override | |||
| { | |||
| } | |||
| void StartFixMachine() override; | |||
| void EndFixMachine() override; | |||
| bool GetFixStatus() override; | |||
| void StartSaveHuman() override; | |||
| void EndSaveHuman() override; | |||
| bool GetSaveStatus() override; | |||
| bool Attack(double angle) override; | |||
| bool CarryHuman() override; | |||
| bool ReleaseHuman() override; | |||
| bool HangHuman() override; | |||
| bool WaitThread() override | |||
| { | |||
| @@ -87,6 +87,17 @@ namespace THUAI6 | |||
| ButcherBuffType4 = 4, | |||
| }; | |||
| // 人类状态枚举 | |||
| enum class HumanState : unsigned char | |||
| { | |||
| NullHumanState = 0, | |||
| Idle = 1, | |||
| Fixing = 2, | |||
| Dying = 3, | |||
| OnChair = 4, | |||
| Dead = 5, | |||
| }; | |||
| // 玩家类 | |||
| struct Player | |||
| { | |||
| @@ -107,8 +118,7 @@ namespace THUAI6 | |||
| struct Human : public Player | |||
| { | |||
| bool onChair; // 是否被挂 | |||
| bool onGround; // 是否倒地 | |||
| HumanState state; // 人类状态 | |||
| int32_t life; // 剩余生命(本次倒地之前还能承受的伤害) | |||
| int32_t hangedTime; // 被挂的次数 | |||
| @@ -76,6 +76,15 @@ namespace Proto2THUAI6 | |||
| {protobuf::ButcherBuffType::BBUFFTYPE4, THUAI6::ButcherBuffType::ButcherBuffType4}, | |||
| }; | |||
| inline std::map<protobuf::HumanState, THUAI6::HumanState> humanStateDict{ | |||
| {protobuf::HumanState::NULL_STATUS, THUAI6::HumanState::NullHumanState}, | |||
| {protobuf::HumanState::IDLE, THUAI6::HumanState::Idle}, | |||
| {protobuf::HumanState::FIXING, THUAI6::HumanState::Fixing}, | |||
| {protobuf::HumanState::DYING, THUAI6::HumanState::Dying}, | |||
| {protobuf::HumanState::ON_CHAIR, THUAI6::HumanState::OnChair}, | |||
| {protobuf::HumanState::DEAD, THUAI6::HumanState::Dead}, | |||
| }; | |||
| // 用于将Protobuf中的类转换为THUAI6的类 | |||
| inline std::shared_ptr<THUAI6::Butcher> Protobuf2THUAI6Butcher(const protobuf::MessageOfButcher& butcherMsg) | |||
| { | |||
| @@ -115,8 +124,7 @@ namespace Proto2THUAI6 | |||
| human->playerType = THUAI6::PlayerType::HumanPlayer; | |||
| human->prop = propTypeDict[humanMsg.prop()]; | |||
| human->place = placeTypeDict[humanMsg.place()]; | |||
| human->onChair = humanMsg.on_chair(); | |||
| human->onGround = humanMsg.on_ground(); | |||
| human->state = humanStateDict[humanMsg.state()]; | |||
| human->life = humanMsg.life(); | |||
| human->hangedTime = humanMsg.hanged_time(); | |||
| human->humanType = humanTypeDict[humanMsg.human_type()]; | |||
| @@ -272,6 +280,14 @@ namespace THUAI62Proto | |||
| sendMsg.set_player_id(id); | |||
| return sendMsg; | |||
| } | |||
| inline protobuf::AttackMsg THUAI62ProtobufAttack(double angle, int64_t id) | |||
| { | |||
| protobuf::AttackMsg attackMsg; | |||
| attackMsg.set_angle(angle); | |||
| attackMsg.set_player_id(id); | |||
| return attackMsg; | |||
| } | |||
| } // namespace THUAI62Proto | |||
| #endif | |||
| @@ -10,26 +10,22 @@ std::future<bool> HumanAPI::Move(int64_t timeInMilliseconds, double angleInRadia | |||
| std::future<bool> HumanAPI::MoveDown(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, 0); }); | |||
| return Move(timeInMilliseconds, 0); | |||
| } | |||
| std::future<bool> HumanAPI::MoveRight(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI * 0.5); }); | |||
| return Move(timeInMilliseconds, PI * 0.5); | |||
| } | |||
| std::future<bool> HumanAPI::MoveUp(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI); }); | |||
| return Move(timeInMilliseconds, PI); | |||
| } | |||
| std::future<bool> HumanAPI::MoveLeft(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI * 1.5); }); | |||
| return Move(timeInMilliseconds, PI * 1.5); | |||
| } | |||
| std::future<bool> ButcherAPI::Move(int64_t timeInMilliseconds, double angleInRadian) | |||
| @@ -40,26 +36,22 @@ std::future<bool> ButcherAPI::Move(int64_t timeInMilliseconds, double angleInRad | |||
| std::future<bool> ButcherAPI::MoveDown(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, 0); }); | |||
| return Move(timeInMilliseconds, 0); | |||
| } | |||
| std::future<bool> ButcherAPI::MoveRight(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI * 0.5); }); | |||
| return Move(timeInMilliseconds, PI * 0.5); | |||
| } | |||
| std::future<bool> ButcherAPI::MoveUp(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI); }); | |||
| return Move(timeInMilliseconds, PI); | |||
| } | |||
| std::future<bool> ButcherAPI::MoveLeft(int64_t timeInMilliseconds) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Move(timeInMilliseconds, PI * 1.5); }); | |||
| return Move(timeInMilliseconds, PI * 1.5); | |||
| } | |||
| std::future<bool> HumanAPI::PickProp(THUAI6::PropType prop) | |||
| @@ -110,6 +102,30 @@ std::future<bool> ButcherAPI::SendMessage(int64_t toID, std::string message) | |||
| { return logic.SendMessage(toID, message); }); | |||
| } | |||
| std::future<bool> HumanAPI::HaveMessage() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.HaveMessage(); }); | |||
| } | |||
| std::future<bool> ButcherAPI::HaveMessage() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.HaveMessage(); }); | |||
| } | |||
| std::future<std::pair<int64_t, std::string>> HumanAPI::GetMessage() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.GetMessage(); }); | |||
| } | |||
| std::future<std::pair<int64_t, std::string>> ButcherAPI::GetMessage() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.GetMessage(); }); | |||
| } | |||
| std::vector<std::shared_ptr<const THUAI6::Butcher>> HumanAPI::GetButcher() const | |||
| { | |||
| return logic.GetButchers(); | |||
| @@ -120,16 +136,126 @@ std::vector<std::shared_ptr<const THUAI6::Human>> HumanAPI::GetHuman() const | |||
| return logic.GetHumans(); | |||
| } | |||
| std::vector<std::shared_ptr<const THUAI6::Butcher>> ButcherAPI::GetButcher() const | |||
| { | |||
| return logic.GetButchers(); | |||
| } | |||
| std::vector<std::shared_ptr<const THUAI6::Human>> ButcherAPI::GetHuman() const | |||
| { | |||
| return logic.GetHumans(); | |||
| } | |||
| std::vector<std::shared_ptr<const THUAI6::Prop>> HumanAPI::GetProps() const | |||
| { | |||
| return logic.GetProps(); | |||
| } | |||
| std::vector<std::shared_ptr<const THUAI6::Prop>> ButcherAPI::GetProps() const | |||
| { | |||
| return logic.GetProps(); | |||
| } | |||
| std::vector<std::vector<THUAI6::PlaceType>> HumanAPI::GetFullMap() const | |||
| { | |||
| return logic.GetFullMap(); | |||
| } | |||
| THUAI6::PlaceType HumanAPI::GetPlaceType(int32_t CellX, int32_t CellY) const | |||
| { | |||
| return logic.GetPlaceType(CellX, CellY); | |||
| } | |||
| THUAI6::PlaceType ButcherAPI::GetPlaceType(int32_t CellX, int32_t CellY) const | |||
| { | |||
| return logic.GetPlaceType(CellX, CellY); | |||
| } | |||
| std::vector<std::vector<THUAI6::PlaceType>> ButcherAPI::GetFullMap() const | |||
| { | |||
| return logic.GetFullMap(); | |||
| } | |||
| void HumanAPI::StartFixMachine() | |||
| { | |||
| std::thread([&]() | |||
| { logic.StartFixMachine(); }) | |||
| .detach(); | |||
| } | |||
| void HumanAPI::EndFixMachine() | |||
| { | |||
| std::thread([&]() | |||
| { logic.EndFixMachine(); }) | |||
| .detach(); | |||
| } | |||
| std::future<bool> HumanAPI::GetFixStatus() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.GetFixStatus(); }); | |||
| } | |||
| void HumanAPI::StartSaveHuman() | |||
| { | |||
| std::thread([&]() | |||
| { logic.StartSaveHuman(); }) | |||
| .detach(); | |||
| } | |||
| void HumanAPI::EndSaveHuman() | |||
| { | |||
| std::thread([&]() | |||
| { logic.EndSaveHuman(); }) | |||
| .detach(); | |||
| } | |||
| std::future<bool> HumanAPI::GetSaveStatus() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.GetSaveStatus(); }); | |||
| } | |||
| std::future<bool> HumanAPI::Escape() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Escape(); }); | |||
| } | |||
| std::shared_ptr<const THUAI6::Human> HumanAPI::GetSelfInfo() const | |||
| { | |||
| return logic.HumanGetSelfInfo(); | |||
| } | |||
| std::future<bool> ButcherAPI::Attack(double angleInRadian) | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.Attack(angleInRadian); }); | |||
| } | |||
| std::future<bool> ButcherAPI::CarryHuman() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.CarryHuman(); }); | |||
| } | |||
| std::future<bool> ButcherAPI::ReleaseHuman() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.ReleaseHuman(); }); | |||
| } | |||
| std::future<bool> ButcherAPI::HangHuman() | |||
| { | |||
| return std::async(std::launch::async, [&]() | |||
| { return logic.HangHuman(); }); | |||
| } | |||
| std::shared_ptr<const THUAI6::Butcher> ButcherAPI::GetSelfInfo() const | |||
| { | |||
| return logic.ButcherGetSelfInfo(); | |||
| } | |||
| void HumanAPI::Play(IAI& ai) | |||
| { | |||
| ai.play(*this); | |||
| @@ -85,7 +85,7 @@ bool Communication::HaveMessage(int64_t playerID) | |||
| return false; | |||
| } | |||
| std::pair<std::string, int64_t> Communication::GetMessage(int64_t playerID) | |||
| std::pair<int64_t, std::string> Communication::GetMessage(int64_t playerID) | |||
| { | |||
| protobuf::MsgRes getMessageResult; | |||
| ClientContext context; | |||
| @@ -94,12 +94,12 @@ std::pair<std::string, int64_t> Communication::GetMessage(int64_t playerID) | |||
| if (status.ok()) | |||
| { | |||
| if (getMessageResult.have_message()) | |||
| return std::make_pair(getMessageResult.message_received(), getMessageResult.from_player_id()); | |||
| return std::make_pair(getMessageResult.from_player_id(), getMessageResult.message_received()); | |||
| else | |||
| return std::make_pair("", -1); | |||
| return std::make_pair(-1, ""); | |||
| } | |||
| else | |||
| return std::make_pair("", -1); | |||
| return std::make_pair(-1, ""); | |||
| } | |||
| bool Communication::Escape(int64_t playerID) | |||
| @@ -114,6 +114,124 @@ bool Communication::Escape(int64_t playerID) | |||
| return false; | |||
| } | |||
| void Communication::FixMachine(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes fixMachineResult; | |||
| auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| ClientContext context; | |||
| while (isFixing) | |||
| { | |||
| auto fixStream = THUAI6Stub->FixMachine(&context); | |||
| fixStream->Write(request); | |||
| fixStream->Read(&fixMachineResult); | |||
| if (!fixMachineResult.act_success()) | |||
| { | |||
| isFixing = false; | |||
| break; | |||
| } | |||
| std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 防止巨量发信 | |||
| } | |||
| } | |||
| void Communication::StartFixMachine(int64_t playerID) | |||
| { | |||
| isFixing = true; | |||
| FixMachine(playerID); | |||
| } | |||
| void Communication::EndFixMachine() | |||
| { | |||
| isFixing = false; | |||
| } | |||
| bool Communication::GetFixStatus() | |||
| { | |||
| return isFixing; | |||
| } | |||
| void Communication::SaveHuman(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes saveHumanResult; | |||
| auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| ClientContext context; | |||
| while (isSaving) | |||
| { | |||
| auto saveStream = THUAI6Stub->SaveHuman(&context); | |||
| saveStream->Write(request); | |||
| saveStream->Read(&saveHumanResult); | |||
| if (!saveHumanResult.act_success()) | |||
| { | |||
| isSaving = false; | |||
| break; | |||
| } | |||
| std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 防止巨量发信 | |||
| } | |||
| } | |||
| void Communication::StartSaveHuman(int64_t playerID) | |||
| { | |||
| isSaving = true; | |||
| SaveHuman(playerID); | |||
| } | |||
| void Communication::EndSaveHuman() | |||
| { | |||
| isSaving = false; | |||
| } | |||
| bool Communication::GetSaveStatus() | |||
| { | |||
| return isSaving; | |||
| } | |||
| bool Communication::Attack(double angle, int64_t playerID) | |||
| { | |||
| protobuf::BoolRes attackResult; | |||
| ClientContext context; | |||
| auto request = THUAI62Proto::THUAI62ProtobufAttack(angle, playerID); | |||
| auto status = THUAI6Stub->Attack(&context, request, &attackResult); | |||
| if (status.ok()) | |||
| return attackResult.act_success(); | |||
| else | |||
| return false; | |||
| } | |||
| bool Communication::CarryHuman(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes carryHumanResult; | |||
| ClientContext context; | |||
| auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| auto status = THUAI6Stub->CarryHuman(&context, request, &carryHumanResult); | |||
| if (status.ok()) | |||
| return carryHumanResult.act_success(); | |||
| else | |||
| return false; | |||
| } | |||
| bool Communication::ReleaseHuman(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes releaseHumanResult; | |||
| ClientContext context; | |||
| auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| auto status = THUAI6Stub->ReleaseHuman(&context, request, &releaseHumanResult); | |||
| if (status.ok()) | |||
| return releaseHumanResult.act_success(); | |||
| else | |||
| return false; | |||
| } | |||
| bool Communication::HangHuman(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes hangHumanResult; | |||
| ClientContext context; | |||
| auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| auto status = THUAI6Stub->HangHuman(&context, request, &hangHumanResult); | |||
| if (status.ok()) | |||
| return hangHumanResult.act_success(); | |||
| else | |||
| return false; | |||
| } | |||
| bool Communication::TryConnection(int64_t playerID) | |||
| { | |||
| protobuf::BoolRes reply; | |||
| @@ -62,121 +62,102 @@ std::vector<std::vector<THUAI6::PlaceType>> Logic::GetFullMap() const | |||
| return currentState->gamemap; | |||
| } | |||
| THUAI6::PlaceType Logic::GetPlaceType(int32_t CellX, int32_t CellY) const | |||
| { | |||
| std::lock_guard<std::mutex> lock(mtxState); | |||
| return currentState->gamemap[CellX][CellY]; | |||
| } | |||
| bool Logic::Move(int64_t time, double angle) | |||
| { | |||
| // protobuf::MoveRes moveResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufMove(time, angle, playerID); | |||
| // auto status = THUAI6Stub->Move(&context, request, &moveResult); | |||
| // if (status.ok()) | |||
| // return moveResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->Move(time, angle, playerID); | |||
| } | |||
| bool Logic::PickProp(THUAI6::PropType prop) | |||
| { | |||
| // protobuf::BoolRes pickPropResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufPick(prop, playerID); | |||
| // auto status = THUAI6Stub->PickProp(&context, request, &pickPropResult); | |||
| // if (status.ok()) | |||
| // return pickPropResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->PickProp(prop, playerID); | |||
| } | |||
| bool Logic::UseProp() | |||
| { | |||
| // protobuf::BoolRes usePropResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // auto status = THUAI6Stub->UseProp(&context, request, &usePropResult); | |||
| // if (status.ok()) | |||
| // return usePropResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->UseProp(playerID); | |||
| } | |||
| bool Logic::UseSkill() | |||
| { | |||
| // protobuf::BoolRes useSkillResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // auto status = THUAI6Stub->UseSkill(&context, request, &useSkillResult); | |||
| // if (status.ok()) | |||
| // return useSkillResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->UseSkill(playerID); | |||
| } | |||
| bool Logic::SendMessage(int64_t toID, std::string message) | |||
| { | |||
| // protobuf::BoolRes sendMessageResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufSend(message, toID, playerID); | |||
| // auto status = THUAI6Stub->SendMessage(&context, request, &sendMessageResult); | |||
| // if (status.ok()) | |||
| // return sendMessageResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->SendMessage(toID, message, playerID); | |||
| } | |||
| bool Logic::HaveMessage() | |||
| { | |||
| // protobuf::BoolRes haveMessageResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // auto status = THUAI6Stub->HaveMessage(&context, request, &haveMessageResult); | |||
| // if (status.ok()) | |||
| // return haveMessageResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->HaveMessage(playerID); | |||
| } | |||
| std::pair<std::string, int64_t> Logic::GetMessage() | |||
| std::pair<int64_t, std::string> Logic::GetMessage() | |||
| { | |||
| // protobuf::MsgRes getMessageResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // auto status = THUAI6Stub->GetMessage(&context, request, &getMessageResult); | |||
| // if (status.ok()) | |||
| // { | |||
| // if (getMessageResult.have_message()) | |||
| // return std::make_pair(getMessageResult.message_received(), getMessageResult.from_player_id()); | |||
| // else | |||
| // return std::make_pair("", -1); | |||
| // } | |||
| // else | |||
| // return std::make_pair("", -1); | |||
| return pComm->GetMessage(playerID); | |||
| } | |||
| bool Logic::Escape() | |||
| { | |||
| // protobuf::BoolRes escapeResult; | |||
| // ClientContext context; | |||
| // auto request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // auto status = THUAI6Stub->Escape(&context, request, &escapeResult); | |||
| // if (status.ok()) | |||
| // return escapeResult.act_success(); | |||
| // else | |||
| // return false; | |||
| return pComm->Escape(playerID); | |||
| } | |||
| void Logic::StartFixMachine() | |||
| { | |||
| pComm->StartFixMachine(playerID); | |||
| } | |||
| void Logic::EndFixMachine() | |||
| { | |||
| pComm->EndFixMachine(); | |||
| } | |||
| bool Logic::GetFixStatus() | |||
| { | |||
| return pComm->GetFixStatus(); | |||
| } | |||
| void Logic::StartSaveHuman() | |||
| { | |||
| pComm->StartSaveHuman(playerID); | |||
| } | |||
| void Logic::EndSaveHuman() | |||
| { | |||
| pComm->EndSaveHuman(); | |||
| } | |||
| bool Logic::GetSaveStatus() | |||
| { | |||
| return pComm->GetSaveStatus(); | |||
| } | |||
| bool Logic::Attack(double angle) | |||
| { | |||
| return pComm->Attack(angle, playerID); | |||
| } | |||
| bool Logic::CarryHuman() | |||
| { | |||
| return pComm->CarryHuman(playerID); | |||
| } | |||
| bool Logic::ReleaseHuman() | |||
| { | |||
| return pComm->ReleaseHuman(playerID); | |||
| } | |||
| bool Logic::HangHuman() | |||
| { | |||
| return pComm->HangHuman(playerID); | |||
| } | |||
| void Logic::ProcessMessage() | |||
| { | |||
| auto messageThread = [&]() | |||
| @@ -268,14 +249,6 @@ void Logic::PlayerWrapper(std::function<void()> player) | |||
| bool Logic::TryConnection() | |||
| { | |||
| // IDMsg request = THUAI62Proto::THUAI62ProtobufID(playerID); | |||
| // BoolRes reply; | |||
| // ClientContext context; | |||
| // auto status = THUAI6Stub->TryConnection(&context, request, &reply); | |||
| // if (status.ok()) | |||
| // return true; | |||
| // else | |||
| // return false; | |||
| return pComm->TryConnection(playerID); | |||
| } | |||
| @@ -26,7 +26,7 @@ namespace protobuf | |||
| ::_pbi::ConstantInitialized | |||
| ) : | |||
| _impl_{ | |||
| /*decltype(_impl_.buff_)*/ {}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, /*decltype(_impl_.x_)*/ 0, /*decltype(_impl_.y_)*/ 0, /*decltype(_impl_.speed_)*/ 0, /*decltype(_impl_.life_)*/ 0, /*decltype(_impl_.time_until_skill_available_)*/ 0, /*decltype(_impl_.hanged_time_)*/ 0, /*decltype(_impl_.place_)*/ 0, /*decltype(_impl_.prop_)*/ 0, /*decltype(_impl_.human_type_)*/ 0, /*decltype(_impl_.guid_)*/ int64_t{0}, /*decltype(_impl_.chair_time_)*/ 0, /*decltype(_impl_.on_chair_)*/ false, /*decltype(_impl_.on_ground_)*/ false, /*decltype(_impl_.view_range_)*/ 0, /*decltype(_impl_.ground_time_)*/ 0, /*decltype(_impl_.player_id_)*/ int64_t{0}, /*decltype(_impl_.radius_)*/ 0, /*decltype(_impl_._cached_size_)*/ {}} | |||
| /*decltype(_impl_.buff_)*/ {}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, /*decltype(_impl_.x_)*/ 0, /*decltype(_impl_.y_)*/ 0, /*decltype(_impl_.speed_)*/ 0, /*decltype(_impl_.life_)*/ 0, /*decltype(_impl_.time_until_skill_available_)*/ 0, /*decltype(_impl_.hanged_time_)*/ 0, /*decltype(_impl_.place_)*/ 0, /*decltype(_impl_.prop_)*/ 0, /*decltype(_impl_.human_type_)*/ 0, /*decltype(_impl_.guid_)*/ int64_t{0}, /*decltype(_impl_.chair_time_)*/ 0, /*decltype(_impl_.state_)*/ 0, /*decltype(_impl_.view_range_)*/ 0, /*decltype(_impl_.ground_time_)*/ 0, /*decltype(_impl_.player_id_)*/ int64_t{0}, /*decltype(_impl_.radius_)*/ 0, /*decltype(_impl_._cached_size_)*/ {}} | |||
| { | |||
| } | |||
| struct MessageOfHumanDefaultTypeInternal | |||
| @@ -264,9 +264,8 @@ const uint32_t TableStruct_Message2Clients_2eproto::offsets[] PROTOBUF_SECTION_V | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.prop_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.human_type_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.guid_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.on_chair_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.state_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.chair_time_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.on_ground_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.ground_time_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.player_id_), | |||
| PROTOBUF_FIELD_OFFSET(::protobuf::MessageOfHuman, _impl_.view_range_), | |||
| @@ -369,15 +368,15 @@ const uint32_t TableStruct_Message2Clients_2eproto::offsets[] PROTOBUF_SECTION_V | |||
| }; | |||
| static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { | |||
| {0, -1, -1, sizeof(::protobuf::MessageOfHuman)}, | |||
| {24, -1, -1, sizeof(::protobuf::MessageOfButcher)}, | |||
| {44, -1, -1, sizeof(::protobuf::MessageOfProp)}, | |||
| {58, -1, -1, sizeof(::protobuf::MessageOfPickedProp)}, | |||
| {69, -1, -1, sizeof(::protobuf::MessageOfMap_Row)}, | |||
| {76, -1, -1, sizeof(::protobuf::MessageOfMap)}, | |||
| {83, -1, -1, sizeof(::protobuf::MessageToClient)}, | |||
| {93, -1, -1, sizeof(::protobuf::MoveRes)}, | |||
| {102, -1, -1, sizeof(::protobuf::BoolRes)}, | |||
| {109, -1, -1, sizeof(::protobuf::MsgRes)}, | |||
| {23, -1, -1, sizeof(::protobuf::MessageOfButcher)}, | |||
| {43, -1, -1, sizeof(::protobuf::MessageOfProp)}, | |||
| {57, -1, -1, sizeof(::protobuf::MessageOfPickedProp)}, | |||
| {68, -1, -1, sizeof(::protobuf::MessageOfMap_Row)}, | |||
| {75, -1, -1, sizeof(::protobuf::MessageOfMap)}, | |||
| {82, -1, -1, sizeof(::protobuf::MessageToClient)}, | |||
| {92, -1, -1, sizeof(::protobuf::MoveRes)}, | |||
| {101, -1, -1, sizeof(::protobuf::BoolRes)}, | |||
| {108, -1, -1, sizeof(::protobuf::MsgRes)}, | |||
| }; | |||
| static const ::_pb::Message* const file_default_instances[] = { | |||
| @@ -401,9 +400,9 @@ const char descriptor_table_protodef_Message2Clients_2eproto[] PROTOBUF_SECTION_ | |||
| "ill_available\030\006 \001(\001\022\"\n\005place\030\007 \001(\0162\023.pro" | |||
| "tobuf.PlaceType\022 \n\004prop\030\010 \001(\0162\022.protobuf" | |||
| ".PropType\022\'\n\nhuman_type\030\t \001(\0162\023.protobuf" | |||
| ".HumanType\022\014\n\004guid\030\n \001(\003\022\020\n\010on_chair\030\013 \001" | |||
| "(\010\022\022\n\nchair_time\030\014 \001(\001\022\021\n\ton_ground\030\r \001(" | |||
| "\010\022\023\n\013ground_time\030\016 \001(\001\022\021\n\tplayer_id\030\017 \001(" | |||
| ".HumanType\022\014\n\004guid\030\n \001(\003\022#\n\005state\030\013 \001(\0162" | |||
| "\024.protobuf.HumanState\022\022\n\nchair_time\030\014 \001(" | |||
| "\001\022\023\n\013ground_time\030\016 \001(\001\022\021\n\tplayer_id\030\017 \001(" | |||
| "\003\022\022\n\nview_range\030\020 \001(\005\022\016\n\006radius\030\021 \001(\005\022%\n" | |||
| "\004buff\030\022 \003(\0162\027.protobuf.HumanBuffType\"\335\002\n" | |||
| "\020MessageOfButcher\022\t\n\001x\030\001 \001(\005\022\t\n\001y\030\002 \001(\005\022" | |||
| @@ -486,7 +485,7 @@ namespace protobuf | |||
| MessageOfHuman* const _this = this; | |||
| (void)_this; | |||
| new (&_impl_) Impl_{ | |||
| decltype(_impl_.buff_){from._impl_.buff_}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, decltype(_impl_.x_){}, decltype(_impl_.y_){}, decltype(_impl_.speed_){}, decltype(_impl_.life_){}, decltype(_impl_.time_until_skill_available_){}, decltype(_impl_.hanged_time_){}, decltype(_impl_.place_){}, decltype(_impl_.prop_){}, decltype(_impl_.human_type_){}, decltype(_impl_.guid_){}, decltype(_impl_.chair_time_){}, decltype(_impl_.on_chair_){}, decltype(_impl_.on_ground_){}, decltype(_impl_.view_range_){}, decltype(_impl_.ground_time_){}, decltype(_impl_.player_id_){}, decltype(_impl_.radius_){}, /*decltype(_impl_._cached_size_)*/ {}}; | |||
| decltype(_impl_.buff_){from._impl_.buff_}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, decltype(_impl_.x_){}, decltype(_impl_.y_){}, decltype(_impl_.speed_){}, decltype(_impl_.life_){}, decltype(_impl_.time_until_skill_available_){}, decltype(_impl_.hanged_time_){}, decltype(_impl_.place_){}, decltype(_impl_.prop_){}, decltype(_impl_.human_type_){}, decltype(_impl_.guid_){}, decltype(_impl_.chair_time_){}, decltype(_impl_.state_){}, decltype(_impl_.view_range_){}, decltype(_impl_.ground_time_){}, decltype(_impl_.player_id_){}, decltype(_impl_.radius_){}, /*decltype(_impl_._cached_size_)*/ {}}; | |||
| _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); | |||
| ::memcpy(&_impl_.x_, &from._impl_.x_, static_cast<size_t>(reinterpret_cast<char*>(&_impl_.radius_) - reinterpret_cast<char*>(&_impl_.x_)) + sizeof(_impl_.radius_)); | |||
| @@ -500,7 +499,7 @@ namespace protobuf | |||
| (void)arena; | |||
| (void)is_message_owned; | |||
| new (&_impl_) Impl_{ | |||
| decltype(_impl_.buff_){arena}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, decltype(_impl_.x_){0}, decltype(_impl_.y_){0}, decltype(_impl_.speed_){0}, decltype(_impl_.life_){0}, decltype(_impl_.time_until_skill_available_){0}, decltype(_impl_.hanged_time_){0}, decltype(_impl_.place_){0}, decltype(_impl_.prop_){0}, decltype(_impl_.human_type_){0}, decltype(_impl_.guid_){int64_t{0}}, decltype(_impl_.chair_time_){0}, decltype(_impl_.on_chair_){false}, decltype(_impl_.on_ground_){false}, decltype(_impl_.view_range_){0}, decltype(_impl_.ground_time_){0}, decltype(_impl_.player_id_){int64_t{0}}, decltype(_impl_.radius_){0}, /*decltype(_impl_._cached_size_)*/ {}}; | |||
| decltype(_impl_.buff_){arena}, /*decltype(_impl_._buff_cached_byte_size_)*/ {0}, decltype(_impl_.x_){0}, decltype(_impl_.y_){0}, decltype(_impl_.speed_){0}, decltype(_impl_.life_){0}, decltype(_impl_.time_until_skill_available_){0}, decltype(_impl_.hanged_time_){0}, decltype(_impl_.place_){0}, decltype(_impl_.prop_){0}, decltype(_impl_.human_type_){0}, decltype(_impl_.guid_){int64_t{0}}, decltype(_impl_.chair_time_){0}, decltype(_impl_.state_){0}, decltype(_impl_.view_range_){0}, decltype(_impl_.ground_time_){0}, decltype(_impl_.player_id_){int64_t{0}}, decltype(_impl_.radius_){0}, /*decltype(_impl_._cached_size_)*/ {}}; | |||
| } | |||
| MessageOfHuman::~MessageOfHuman() | |||
| @@ -651,12 +650,13 @@ namespace protobuf | |||
| else | |||
| goto handle_unusual; | |||
| continue; | |||
| // bool on_chair = 11; | |||
| // .protobuf.HumanState state = 11; | |||
| case 11: | |||
| if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 88)) | |||
| { | |||
| _impl_.on_chair_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); | |||
| uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); | |||
| CHK_(ptr); | |||
| _internal_set_state(static_cast<::protobuf::HumanState>(val)); | |||
| } | |||
| else | |||
| goto handle_unusual; | |||
| @@ -671,16 +671,6 @@ namespace protobuf | |||
| else | |||
| goto handle_unusual; | |||
| continue; | |||
| // bool on_ground = 13; | |||
| case 13: | |||
| if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 104)) | |||
| { | |||
| _impl_.on_ground_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); | |||
| CHK_(ptr); | |||
| } | |||
| else | |||
| goto handle_unusual; | |||
| continue; | |||
| // double ground_time = 14; | |||
| case 14: | |||
| if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 113)) | |||
| @@ -851,11 +841,13 @@ namespace protobuf | |||
| target = ::_pbi::WireFormatLite::WriteInt64ToArray(10, this->_internal_guid(), target); | |||
| } | |||
| // bool on_chair = 11; | |||
| if (this->_internal_on_chair() != 0) | |||
| // .protobuf.HumanState state = 11; | |||
| if (this->_internal_state() != 0) | |||
| { | |||
| target = stream->EnsureSpace(target); | |||
| target = ::_pbi::WireFormatLite::WriteBoolToArray(11, this->_internal_on_chair(), target); | |||
| target = ::_pbi::WireFormatLite::WriteEnumToArray( | |||
| 11, this->_internal_state(), target | |||
| ); | |||
| } | |||
| // double chair_time = 12; | |||
| @@ -869,13 +861,6 @@ namespace protobuf | |||
| target = ::_pbi::WireFormatLite::WriteDoubleToArray(12, this->_internal_chair_time(), target); | |||
| } | |||
| // bool on_ground = 13; | |||
| if (this->_internal_on_ground() != 0) | |||
| { | |||
| target = stream->EnsureSpace(target); | |||
| target = ::_pbi::WireFormatLite::WriteBoolToArray(13, this->_internal_on_ground(), target); | |||
| } | |||
| // double ground_time = 14; | |||
| static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); | |||
| double tmp_ground_time = this->_internal_ground_time(); | |||
| @@ -1035,16 +1020,11 @@ namespace protobuf | |||
| total_size += 1 + 8; | |||
| } | |||
| // bool on_chair = 11; | |||
| if (this->_internal_on_chair() != 0) | |||
| // .protobuf.HumanState state = 11; | |||
| if (this->_internal_state() != 0) | |||
| { | |||
| total_size += 1 + 1; | |||
| } | |||
| // bool on_ground = 13; | |||
| if (this->_internal_on_ground() != 0) | |||
| { | |||
| total_size += 1 + 1; | |||
| total_size += 1 + | |||
| ::_pbi::WireFormatLite::EnumSize(this->_internal_state()); | |||
| } | |||
| // int32 view_range = 16; | |||
| @@ -1154,13 +1134,9 @@ namespace protobuf | |||
| { | |||
| _this->_internal_set_chair_time(from._internal_chair_time()); | |||
| } | |||
| if (from._internal_on_chair() != 0) | |||
| { | |||
| _this->_internal_set_on_chair(from._internal_on_chair()); | |||
| } | |||
| if (from._internal_on_ground() != 0) | |||
| if (from._internal_state() != 0) | |||
| { | |||
| _this->_internal_set_on_ground(from._internal_on_ground()); | |||
| _this->_internal_set_state(from._internal_state()); | |||
| } | |||
| if (from._internal_view_range() != 0) | |||
| { | |||
| @@ -277,8 +277,7 @@ namespace protobuf | |||
| kHumanTypeFieldNumber = 9, | |||
| kGuidFieldNumber = 10, | |||
| kChairTimeFieldNumber = 12, | |||
| kOnChairFieldNumber = 11, | |||
| kOnGroundFieldNumber = 13, | |||
| kStateFieldNumber = 11, | |||
| kViewRangeFieldNumber = 16, | |||
| kGroundTimeFieldNumber = 14, | |||
| kPlayerIdFieldNumber = 15, | |||
| @@ -415,24 +414,14 @@ namespace protobuf | |||
| void _internal_set_chair_time(double value); | |||
| public: | |||
| // bool on_chair = 11; | |||
| void clear_on_chair(); | |||
| bool on_chair() const; | |||
| void set_on_chair(bool value); | |||
| // .protobuf.HumanState state = 11; | |||
| void clear_state(); | |||
| ::protobuf::HumanState state() const; | |||
| void set_state(::protobuf::HumanState value); | |||
| private: | |||
| bool _internal_on_chair() const; | |||
| void _internal_set_on_chair(bool value); | |||
| public: | |||
| // bool on_ground = 13; | |||
| void clear_on_ground(); | |||
| bool on_ground() const; | |||
| void set_on_ground(bool value); | |||
| private: | |||
| bool _internal_on_ground() const; | |||
| void _internal_set_on_ground(bool value); | |||
| ::protobuf::HumanState _internal_state() const; | |||
| void _internal_set_state(::protobuf::HumanState value); | |||
| public: | |||
| // int32 view_range = 16; | |||
| @@ -499,8 +488,7 @@ namespace protobuf | |||
| int human_type_; | |||
| int64_t guid_; | |||
| double chair_time_; | |||
| bool on_chair_; | |||
| bool on_ground_; | |||
| int state_; | |||
| int32_t view_range_; | |||
| double ground_time_; | |||
| int64_t player_id_; | |||
| @@ -2955,28 +2943,28 @@ namespace protobuf | |||
| // @@protoc_insertion_point(field_set:protobuf.MessageOfHuman.guid) | |||
| } | |||
| // bool on_chair = 11; | |||
| inline void MessageOfHuman::clear_on_chair() | |||
| // .protobuf.HumanState state = 11; | |||
| inline void MessageOfHuman::clear_state() | |||
| { | |||
| _impl_.on_chair_ = false; | |||
| _impl_.state_ = 0; | |||
| } | |||
| inline bool MessageOfHuman::_internal_on_chair() const | |||
| inline ::protobuf::HumanState MessageOfHuman::_internal_state() const | |||
| { | |||
| return _impl_.on_chair_; | |||
| return static_cast<::protobuf::HumanState>(_impl_.state_); | |||
| } | |||
| inline bool MessageOfHuman::on_chair() const | |||
| inline ::protobuf::HumanState MessageOfHuman::state() const | |||
| { | |||
| // @@protoc_insertion_point(field_get:protobuf.MessageOfHuman.on_chair) | |||
| return _internal_on_chair(); | |||
| // @@protoc_insertion_point(field_get:protobuf.MessageOfHuman.state) | |||
| return _internal_state(); | |||
| } | |||
| inline void MessageOfHuman::_internal_set_on_chair(bool value) | |||
| inline void MessageOfHuman::_internal_set_state(::protobuf::HumanState value) | |||
| { | |||
| _impl_.on_chair_ = value; | |||
| _impl_.state_ = value; | |||
| } | |||
| inline void MessageOfHuman::set_on_chair(bool value) | |||
| inline void MessageOfHuman::set_state(::protobuf::HumanState value) | |||
| { | |||
| _internal_set_on_chair(value); | |||
| // @@protoc_insertion_point(field_set:protobuf.MessageOfHuman.on_chair) | |||
| _internal_set_state(value); | |||
| // @@protoc_insertion_point(field_set:protobuf.MessageOfHuman.state) | |||
| } | |||
| // double chair_time = 12; | |||
| @@ -3003,30 +2991,6 @@ namespace protobuf | |||
| // @@protoc_insertion_point(field_set:protobuf.MessageOfHuman.chair_time) | |||
| } | |||
| // bool on_ground = 13; | |||
| inline void MessageOfHuman::clear_on_ground() | |||
| { | |||
| _impl_.on_ground_ = false; | |||
| } | |||
| inline bool MessageOfHuman::_internal_on_ground() const | |||
| { | |||
| return _impl_.on_ground_; | |||
| } | |||
| inline bool MessageOfHuman::on_ground() const | |||
| { | |||
| // @@protoc_insertion_point(field_get:protobuf.MessageOfHuman.on_ground) | |||
| return _internal_on_ground(); | |||
| } | |||
| inline void MessageOfHuman::_internal_set_on_ground(bool value) | |||
| { | |||
| _impl_.on_ground_ = value; | |||
| } | |||
| inline void MessageOfHuman::set_on_ground(bool value) | |||
| { | |||
| _internal_set_on_ground(value); | |||
| // @@protoc_insertion_point(field_set:protobuf.MessageOfHuman.on_ground) | |||
| } | |||
| // double ground_time = 14; | |||
| inline void MessageOfHuman::clear_ground_time() | |||
| { | |||
| @@ -23,7 +23,7 @@ namespace _pbi = _pb::internal; | |||
| namespace protobuf | |||
| { | |||
| } // namespace protobuf | |||
| static const ::_pb::EnumDescriptor* file_level_enum_descriptors_MessageType_2eproto[8]; | |||
| static const ::_pb::EnumDescriptor* file_level_enum_descriptors_MessageType_2eproto[9]; | |||
| static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_MessageType_2eproto = nullptr; | |||
| const uint32_t TableStruct_MessageType_2eproto::offsets[1] = {}; | |||
| static constexpr ::_pbi::MigrationSchema* schemas = nullptr; | |||
| @@ -39,22 +39,24 @@ const char descriptor_table_protodef_MessageType_2eproto[] PROTOBUF_SECTION_VARI | |||
| "PTYPE2\020\002\022\n\n\006PTYPE3\020\003\022\n\n\006PTYPE4\020\004*d\n\rHuma" | |||
| "nBuffType\022\023\n\017NULL_HBUFF_TYPE\020\000\022\016\n\nHBUFFT" | |||
| "YPE1\020\001\022\016\n\nHBUFFTYPE2\020\002\022\016\n\nHBUFFTYPE3\020\003\022\016" | |||
| "\n\nHBUFFTYPE4\020\004*f\n\017ButcherBuffType\022\023\n\017NUL" | |||
| "L_BBUFF_TYPE\020\000\022\016\n\nBBUFFTYPE1\020\001\022\016\n\nBBUFFT" | |||
| "YPE2\020\002\022\016\n\nBBUFFTYPE3\020\003\022\016\n\nBBUFFTYPE4\020\004*H" | |||
| "\n\nPlayerType\022\024\n\020NULL_PLAYER_TYPE\020\000\022\020\n\014HU" | |||
| "MAN_PLAYER\020\001\022\022\n\016BUTCHER_PLAYER\020\002*`\n\tHuma" | |||
| "nType\022\023\n\017NULL_HUMAN_TYPE\020\000\022\016\n\nHUMANTYPE1" | |||
| "\020\001\022\016\n\nHUMANTYPE2\020\002\022\016\n\nHUMANTYPE3\020\003\022\016\n\nHU" | |||
| "MANTYPE4\020\004*l\n\013ButcherType\022\025\n\021NULL_BUTCHE" | |||
| "R_TYPE\020\000\022\020\n\014BUTCHERTYPE1\020\001\022\020\n\014BUTCHERTYP" | |||
| "E2\020\002\022\020\n\014BUTCHERTYPE3\020\003\022\020\n\014BUTCHERTYPE4\020\004" | |||
| "b\006proto3"; | |||
| "\n\nHBUFFTYPE4\020\004*V\n\nHumanState\022\017\n\013NULL_STA" | |||
| "TUS\020\000\022\010\n\004IDLE\020\001\022\n\n\006FIXING\020\002\022\t\n\005DYING\020\003\022\014" | |||
| "\n\010ON_CHAIR\020\004\022\010\n\004DEAD\020\005*f\n\017ButcherBuffTyp" | |||
| "e\022\023\n\017NULL_BBUFF_TYPE\020\000\022\016\n\nBBUFFTYPE1\020\001\022\016" | |||
| "\n\nBBUFFTYPE2\020\002\022\016\n\nBBUFFTYPE3\020\003\022\016\n\nBBUFFT" | |||
| "YPE4\020\004*H\n\nPlayerType\022\024\n\020NULL_PLAYER_TYPE" | |||
| "\020\000\022\020\n\014HUMAN_PLAYER\020\001\022\022\n\016BUTCHER_PLAYER\020\002" | |||
| "*`\n\tHumanType\022\023\n\017NULL_HUMAN_TYPE\020\000\022\016\n\nHU" | |||
| "MANTYPE1\020\001\022\016\n\nHUMANTYPE2\020\002\022\016\n\nHUMANTYPE3" | |||
| "\020\003\022\016\n\nHUMANTYPE4\020\004*l\n\013ButcherType\022\025\n\021NUL" | |||
| "L_BUTCHER_TYPE\020\000\022\020\n\014BUTCHERTYPE1\020\001\022\020\n\014BU" | |||
| "TCHERTYPE2\020\002\022\020\n\014BUTCHERTYPE3\020\003\022\020\n\014BUTCHE" | |||
| "RTYPE4\020\004b\006proto3"; | |||
| static ::_pbi::once_flag descriptor_table_MessageType_2eproto_once; | |||
| const ::_pbi::DescriptorTable descriptor_table_MessageType_2eproto = { | |||
| false, | |||
| false, | |||
| 768, | |||
| 856, | |||
| descriptor_table_protodef_MessageType_2eproto, | |||
| "MessageType.proto", | |||
| &descriptor_table_MessageType_2eproto_once, | |||
| @@ -157,11 +159,32 @@ namespace protobuf | |||
| } | |||
| } | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ButcherBuffType_descriptor() | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* HumanState_descriptor() | |||
| { | |||
| ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_MessageType_2eproto); | |||
| return file_level_enum_descriptors_MessageType_2eproto[4]; | |||
| } | |||
| bool HumanState_IsValid(int value) | |||
| { | |||
| switch (value) | |||
| { | |||
| case 0: | |||
| case 1: | |||
| case 2: | |||
| case 3: | |||
| case 4: | |||
| case 5: | |||
| return true; | |||
| default: | |||
| return false; | |||
| } | |||
| } | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ButcherBuffType_descriptor() | |||
| { | |||
| ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_MessageType_2eproto); | |||
| return file_level_enum_descriptors_MessageType_2eproto[5]; | |||
| } | |||
| bool ButcherBuffType_IsValid(int value) | |||
| { | |||
| switch (value) | |||
| @@ -180,7 +203,7 @@ namespace protobuf | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* PlayerType_descriptor() | |||
| { | |||
| ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_MessageType_2eproto); | |||
| return file_level_enum_descriptors_MessageType_2eproto[5]; | |||
| return file_level_enum_descriptors_MessageType_2eproto[6]; | |||
| } | |||
| bool PlayerType_IsValid(int value) | |||
| { | |||
| @@ -198,7 +221,7 @@ namespace protobuf | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* HumanType_descriptor() | |||
| { | |||
| ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_MessageType_2eproto); | |||
| return file_level_enum_descriptors_MessageType_2eproto[6]; | |||
| return file_level_enum_descriptors_MessageType_2eproto[7]; | |||
| } | |||
| bool HumanType_IsValid(int value) | |||
| { | |||
| @@ -218,7 +241,7 @@ namespace protobuf | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ButcherType_descriptor() | |||
| { | |||
| ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_MessageType_2eproto); | |||
| return file_level_enum_descriptors_MessageType_2eproto[7]; | |||
| return file_level_enum_descriptors_MessageType_2eproto[8]; | |||
| } | |||
| bool ButcherType_IsValid(int value) | |||
| { | |||
| @@ -178,6 +178,39 @@ namespace protobuf | |||
| HumanBuffType_descriptor(), name, value | |||
| ); | |||
| } | |||
| enum HumanState : int | |||
| { | |||
| NULL_STATUS = 0, | |||
| IDLE = 1, | |||
| FIXING = 2, | |||
| DYING = 3, | |||
| ON_CHAIR = 4, | |||
| DEAD = 5, | |||
| HumanState_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(), | |||
| HumanState_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max() | |||
| }; | |||
| bool HumanState_IsValid(int value); | |||
| constexpr HumanState HumanState_MIN = NULL_STATUS; | |||
| constexpr HumanState HumanState_MAX = DEAD; | |||
| constexpr int HumanState_ARRAYSIZE = HumanState_MAX + 1; | |||
| const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* HumanState_descriptor(); | |||
| template<typename T> | |||
| inline const std::string& HumanState_Name(T enum_t_value) | |||
| { | |||
| static_assert(::std::is_same<T, HumanState>::value || ::std::is_integral<T>::value, "Incorrect type passed to function HumanState_Name."); | |||
| return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( | |||
| HumanState_descriptor(), enum_t_value | |||
| ); | |||
| } | |||
| inline bool HumanState_Parse( | |||
| ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, HumanState* value | |||
| ) | |||
| { | |||
| return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<HumanState>( | |||
| HumanState_descriptor(), name, value | |||
| ); | |||
| } | |||
| enum ButcherBuffType : int | |||
| { | |||
| NULL_BBUFF_TYPE = 0, | |||
| @@ -361,6 +394,15 @@ inline const EnumDescriptor* GetEnumDescriptor<::protobuf::HumanBuffType>() | |||
| return ::protobuf::HumanBuffType_descriptor(); | |||
| } | |||
| template<> | |||
| struct is_proto_enum<::protobuf::HumanState> : ::std::true_type | |||
| { | |||
| }; | |||
| template<> | |||
| inline const EnumDescriptor* GetEnumDescriptor<::protobuf::HumanState>() | |||
| { | |||
| return ::protobuf::HumanState_descriptor(); | |||
| } | |||
| template<> | |||
| struct is_proto_enum<::protobuf::ButcherBuffType> : ::std::true_type | |||
| { | |||
| }; | |||
| @@ -32,8 +32,10 @@ namespace protobuf | |||
| "/protobuf.AvailableService/SendMessage", | |||
| "/protobuf.AvailableService/HaveMessage", | |||
| "/protobuf.AvailableService/GetMessage", | |||
| "/protobuf.AvailableService/FixMachine", | |||
| "/protobuf.AvailableService/SaveHuman", | |||
| "/protobuf.AvailableService/StartFixMachine", | |||
| "/protobuf.AvailableService/EndFixMachine", | |||
| "/protobuf.AvailableService/StartSaveHuman", | |||
| "/protobuf.AvailableService/EndSaveHuman", | |||
| "/protobuf.AvailableService/Attack", | |||
| "/protobuf.AvailableService/CarryHuman", | |||
| "/protobuf.AvailableService/ReleaseHuman", | |||
| @@ -59,13 +61,15 @@ namespace protobuf | |||
| rpcmethod_SendMessage_(AvailableService_method_names[6], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_HaveMessage_(AvailableService_method_names[7], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_GetMessage_(AvailableService_method_names[8], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_FixMachine_(AvailableService_method_names[9], options.suffix_for_stats(), ::grpc::internal::RpcMethod::BIDI_STREAMING, channel), | |||
| rpcmethod_SaveHuman_(AvailableService_method_names[10], options.suffix_for_stats(), ::grpc::internal::RpcMethod::BIDI_STREAMING, channel), | |||
| rpcmethod_Attack_(AvailableService_method_names[11], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_CarryHuman_(AvailableService_method_names[12], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_ReleaseHuman_(AvailableService_method_names[13], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_HangHuman_(AvailableService_method_names[14], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_Escape_(AvailableService_method_names[15], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel) | |||
| rpcmethod_StartFixMachine_(AvailableService_method_names[9], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_EndFixMachine_(AvailableService_method_names[10], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_StartSaveHuman_(AvailableService_method_names[11], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_EndSaveHuman_(AvailableService_method_names[12], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_Attack_(AvailableService_method_names[13], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_CarryHuman_(AvailableService_method_names[14], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_ReleaseHuman_(AvailableService_method_names[15], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_HangHuman_(AvailableService_method_names[16], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel), | |||
| rpcmethod_Escape_(AvailableService_method_names[17], options.suffix_for_stats(), ::grpc::internal::RpcMethod::NORMAL_RPC, channel) | |||
| { | |||
| } | |||
| @@ -313,44 +317,116 @@ namespace protobuf | |||
| return result; | |||
| } | |||
| ::grpc::ClientReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::FixMachineRaw(::grpc::ClientContext* context) | |||
| ::grpc::Status AvailableService::Stub::StartFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::protobuf::BoolRes* response) | |||
| { | |||
| return ::grpc::internal::ClientReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), rpcmethod_FixMachine_, context); | |||
| return ::grpc::internal::BlockingUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_StartFixMachine_, context, request, response); | |||
| } | |||
| void AvailableService::Stub::async::FixMachine(::grpc::ClientContext* context, ::grpc::ClientBidiReactor<::protobuf::IDMsg, ::protobuf::BoolRes>* reactor) | |||
| void AvailableService::Stub::async::StartFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, std::function<void(::grpc::Status)> f) | |||
| { | |||
| ::grpc::internal::ClientCallbackReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(stub_->channel_.get(), stub_->rpcmethod_FixMachine_, context, reactor); | |||
| ::grpc::internal::CallbackUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_StartFixMachine_, context, request, response, std::move(f)); | |||
| } | |||
| ::grpc::ClientAsyncReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::AsyncFixMachineRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) | |||
| void AvailableService::Stub::async::StartFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, ::grpc::ClientUnaryReactor* reactor) | |||
| { | |||
| return ::grpc::internal::ClientAsyncReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), cq, rpcmethod_FixMachine_, context, true, tag); | |||
| ::grpc::internal::ClientCallbackUnaryFactory::Create<::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_StartFixMachine_, context, request, response, reactor); | |||
| } | |||
| ::grpc::ClientAsyncReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncFixMachineRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncStartFixMachineRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientAsyncReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), cq, rpcmethod_FixMachine_, context, false, nullptr); | |||
| return ::grpc::internal::ClientAsyncResponseReaderHelper::Create<::protobuf::BoolRes, ::protobuf::IDMsg, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_StartFixMachine_, context, request); | |||
| } | |||
| ::grpc::ClientReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::SaveHumanRaw(::grpc::ClientContext* context) | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::AsyncStartFixMachineRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), rpcmethod_SaveHuman_, context); | |||
| auto* result = | |||
| this->PrepareAsyncStartFixMachineRaw(context, request, cq); | |||
| result->StartCall(); | |||
| return result; | |||
| } | |||
| ::grpc::Status AvailableService::Stub::EndFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::protobuf::BoolRes* response) | |||
| { | |||
| return ::grpc::internal::BlockingUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_EndFixMachine_, context, request, response); | |||
| } | |||
| void AvailableService::Stub::async::EndFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, std::function<void(::grpc::Status)> f) | |||
| { | |||
| ::grpc::internal::CallbackUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_EndFixMachine_, context, request, response, std::move(f)); | |||
| } | |||
| void AvailableService::Stub::async::SaveHuman(::grpc::ClientContext* context, ::grpc::ClientBidiReactor<::protobuf::IDMsg, ::protobuf::BoolRes>* reactor) | |||
| void AvailableService::Stub::async::EndFixMachine(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, ::grpc::ClientUnaryReactor* reactor) | |||
| { | |||
| ::grpc::internal::ClientCallbackReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(stub_->channel_.get(), stub_->rpcmethod_SaveHuman_, context, reactor); | |||
| ::grpc::internal::ClientCallbackUnaryFactory::Create<::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_EndFixMachine_, context, request, response, reactor); | |||
| } | |||
| ::grpc::ClientAsyncReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::AsyncSaveHumanRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncEndFixMachineRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientAsyncReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), cq, rpcmethod_SaveHuman_, context, true, tag); | |||
| return ::grpc::internal::ClientAsyncResponseReaderHelper::Create<::protobuf::BoolRes, ::protobuf::IDMsg, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_EndFixMachine_, context, request); | |||
| } | |||
| ::grpc::ClientAsyncReaderWriter<::protobuf::IDMsg, ::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncSaveHumanRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::AsyncEndFixMachineRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientAsyncReaderWriterFactory<::protobuf::IDMsg, ::protobuf::BoolRes>::Create(channel_.get(), cq, rpcmethod_SaveHuman_, context, false, nullptr); | |||
| auto* result = | |||
| this->PrepareAsyncEndFixMachineRaw(context, request, cq); | |||
| result->StartCall(); | |||
| return result; | |||
| } | |||
| ::grpc::Status AvailableService::Stub::StartSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::protobuf::BoolRes* response) | |||
| { | |||
| return ::grpc::internal::BlockingUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_StartSaveHuman_, context, request, response); | |||
| } | |||
| void AvailableService::Stub::async::StartSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, std::function<void(::grpc::Status)> f) | |||
| { | |||
| ::grpc::internal::CallbackUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_StartSaveHuman_, context, request, response, std::move(f)); | |||
| } | |||
| void AvailableService::Stub::async::StartSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, ::grpc::ClientUnaryReactor* reactor) | |||
| { | |||
| ::grpc::internal::ClientCallbackUnaryFactory::Create<::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_StartSaveHuman_, context, request, response, reactor); | |||
| } | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncStartSaveHumanRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientAsyncResponseReaderHelper::Create<::protobuf::BoolRes, ::protobuf::IDMsg, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_StartSaveHuman_, context, request); | |||
| } | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::AsyncStartSaveHumanRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| auto* result = | |||
| this->PrepareAsyncStartSaveHumanRaw(context, request, cq); | |||
| result->StartCall(); | |||
| return result; | |||
| } | |||
| ::grpc::Status AvailableService::Stub::EndSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::protobuf::BoolRes* response) | |||
| { | |||
| return ::grpc::internal::BlockingUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_EndSaveHuman_, context, request, response); | |||
| } | |||
| void AvailableService::Stub::async::EndSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, std::function<void(::grpc::Status)> f) | |||
| { | |||
| ::grpc::internal::CallbackUnaryCall<::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_EndSaveHuman_, context, request, response, std::move(f)); | |||
| } | |||
| void AvailableService::Stub::async::EndSaveHuman(::grpc::ClientContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response, ::grpc::ClientUnaryReactor* reactor) | |||
| { | |||
| ::grpc::internal::ClientCallbackUnaryFactory::Create<::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_EndSaveHuman_, context, request, response, reactor); | |||
| } | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::PrepareAsyncEndSaveHumanRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| return ::grpc::internal::ClientAsyncResponseReaderHelper::Create<::protobuf::BoolRes, ::protobuf::IDMsg, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_EndSaveHuman_, context, request); | |||
| } | |||
| ::grpc::ClientAsyncResponseReader<::protobuf::BoolRes>* AvailableService::Stub::AsyncEndSaveHumanRaw(::grpc::ClientContext* context, const ::protobuf::IDMsg& request, ::grpc::CompletionQueue* cq) | |||
| { | |||
| auto* result = | |||
| this->PrepareAsyncEndSaveHumanRaw(context, request, cq); | |||
| result->StartCall(); | |||
| return result; | |||
| } | |||
| ::grpc::Status AvailableService::Stub::Attack(::grpc::ClientContext* context, const ::protobuf::AttackMsg& request, ::protobuf::BoolRes* response) | |||
| @@ -623,26 +699,28 @@ namespace protobuf | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[9], | |||
| ::grpc::internal::RpcMethod::BIDI_STREAMING, | |||
| new ::grpc::internal::BidiStreamingHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes>( | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| ::grpc::ServerContext* ctx, | |||
| ::grpc::ServerReaderWriter<::protobuf::BoolRes, ::protobuf::IDMsg>* stream) | |||
| const ::protobuf::IDMsg* req, | |||
| ::protobuf::BoolRes* resp) | |||
| { | |||
| return service->FixMachine(ctx, stream); | |||
| return service->StartFixMachine(ctx, req, resp); | |||
| }, | |||
| this | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[10], | |||
| ::grpc::internal::RpcMethod::BIDI_STREAMING, | |||
| new ::grpc::internal::BidiStreamingHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes>( | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| ::grpc::ServerContext* ctx, | |||
| ::grpc::ServerReaderWriter<::protobuf::BoolRes, ::protobuf::IDMsg>* stream) | |||
| const ::protobuf::IDMsg* req, | |||
| ::protobuf::BoolRes* resp) | |||
| { | |||
| return service->SaveHuman(ctx, stream); | |||
| return service->EndFixMachine(ctx, req, resp); | |||
| }, | |||
| this | |||
| ) | |||
| @@ -650,6 +728,34 @@ namespace protobuf | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[11], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| ::grpc::ServerContext* ctx, | |||
| const ::protobuf::IDMsg* req, | |||
| ::protobuf::BoolRes* resp) | |||
| { | |||
| return service->StartSaveHuman(ctx, req, resp); | |||
| }, | |||
| this | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[12], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| ::grpc::ServerContext* ctx, | |||
| const ::protobuf::IDMsg* req, | |||
| ::protobuf::BoolRes* resp) | |||
| { | |||
| return service->EndSaveHuman(ctx, req, resp); | |||
| }, | |||
| this | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[13], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::AttackMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| ::grpc::ServerContext* ctx, | |||
| @@ -662,7 +768,7 @@ namespace protobuf | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[12], | |||
| AvailableService_method_names[14], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| @@ -676,7 +782,7 @@ namespace protobuf | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[13], | |||
| AvailableService_method_names[15], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| @@ -690,7 +796,7 @@ namespace protobuf | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[14], | |||
| AvailableService_method_names[16], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| @@ -704,7 +810,7 @@ namespace protobuf | |||
| ) | |||
| )); | |||
| AddMethod(new ::grpc::internal::RpcServiceMethod( | |||
| AvailableService_method_names[15], | |||
| AvailableService_method_names[17], | |||
| ::grpc::internal::RpcMethod::NORMAL_RPC, | |||
| new ::grpc::internal::RpcMethodHandler<AvailableService::Service, ::protobuf::IDMsg, ::protobuf::BoolRes, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( | |||
| [](AvailableService::Service* service, | |||
| @@ -795,17 +901,35 @@ namespace protobuf | |||
| return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); | |||
| } | |||
| ::grpc::Status AvailableService::Service::FixMachine(::grpc::ServerContext* context, ::grpc::ServerReaderWriter<::protobuf::BoolRes, ::protobuf::IDMsg>* stream) | |||
| ::grpc::Status AvailableService::Service::StartFixMachine(::grpc::ServerContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response) | |||
| { | |||
| (void)context; | |||
| (void)request; | |||
| (void)response; | |||
| return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); | |||
| } | |||
| ::grpc::Status AvailableService::Service::EndFixMachine(::grpc::ServerContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response) | |||
| { | |||
| (void)context; | |||
| (void)stream; | |||
| (void)request; | |||
| (void)response; | |||
| return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); | |||
| } | |||
| ::grpc::Status AvailableService::Service::SaveHuman(::grpc::ServerContext* context, ::grpc::ServerReaderWriter<::protobuf::BoolRes, ::protobuf::IDMsg>* stream) | |||
| ::grpc::Status AvailableService::Service::StartSaveHuman(::grpc::ServerContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response) | |||
| { | |||
| (void)context; | |||
| (void)stream; | |||
| (void)request; | |||
| (void)response; | |||
| return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); | |||
| } | |||
| ::grpc::Status AvailableService::Service::EndSaveHuman(::grpc::ServerContext* context, const ::protobuf::IDMsg* request, ::protobuf::BoolRes* response) | |||
| { | |||
| (void)context; | |||
| (void)request; | |||
| (void)response; | |||
| return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); | |||
| } | |||
| @@ -31,7 +31,7 @@ static constexpr ::_pb::Message* const* file_default_instances = nullptr; | |||
| const char descriptor_table_protodef_Services_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = | |||
| "\n\016Services.proto\022\010protobuf\032\025Message2Clie" | |||
| "nts.proto\032\024Message2Server.proto2\300\006\n\020Avai" | |||
| "nts.proto\032\024Message2Server.proto2\253\007\n\020Avai" | |||
| "lableService\0223\n\rTryConnection\022\017.protobuf" | |||
| ".IDMsg\032\021.protobuf.BoolRes\022=\n\tAddPlayer\022\023" | |||
| ".protobuf.PlayerMsg\032\031.protobuf.MessageTo" | |||
| @@ -43,16 +43,19 @@ const char descriptor_table_protodef_Services_2eproto[] PROTOBUF_SECTION_VARIABL | |||
| "3\n\013SendMessage\022\021.protobuf.SendMsg\032\021.prot" | |||
| "obuf.BoolRes\0221\n\013HaveMessage\022\017.protobuf.I" | |||
| "DMsg\032\021.protobuf.BoolRes\022/\n\nGetMessage\022\017." | |||
| "protobuf.IDMsg\032\020.protobuf.MsgRes\0224\n\nFixM" | |||
| "achine\022\017.protobuf.IDMsg\032\021.protobuf.BoolR" | |||
| "es(\0010\001\0223\n\tSaveHuman\022\017.protobuf.IDMsg\032\021.p" | |||
| "rotobuf.BoolRes(\0010\001\0220\n\006Attack\022\023.protobuf" | |||
| ".AttackMsg\032\021.protobuf.BoolRes\0220\n\nCarryHu" | |||
| "man\022\017.protobuf.IDMsg\032\021.protobuf.BoolRes\022" | |||
| "2\n\014ReleaseHuman\022\017.protobuf.IDMsg\032\021.proto" | |||
| "buf.BoolRes\022/\n\tHangHuman\022\017.protobuf.IDMs" | |||
| "g\032\021.protobuf.BoolRes\022,\n\006Escape\022\017.protobu" | |||
| "f.IDMsg\032\021.protobuf.BoolResb\006proto3"; | |||
| "protobuf.IDMsg\032\020.protobuf.MsgRes\0225\n\017Star" | |||
| "tFixMachine\022\017.protobuf.IDMsg\032\021.protobuf." | |||
| "BoolRes\0223\n\rEndFixMachine\022\017.protobuf.IDMs" | |||
| "g\032\021.protobuf.BoolRes\0224\n\016StartSaveHuman\022\017" | |||
| ".protobuf.IDMsg\032\021.protobuf.BoolRes\0222\n\014En" | |||
| "dSaveHuman\022\017.protobuf.IDMsg\032\021.protobuf.B" | |||
| "oolRes\0220\n\006Attack\022\023.protobuf.AttackMsg\032\021." | |||
| "protobuf.BoolRes\0220\n\nCarryHuman\022\017.protobu" | |||
| "f.IDMsg\032\021.protobuf.BoolRes\0222\n\014ReleaseHum" | |||
| "an\022\017.protobuf.IDMsg\032\021.protobuf.BoolRes\022/" | |||
| "\n\tHangHuman\022\017.protobuf.IDMsg\032\021.protobuf." | |||
| "BoolRes\022,\n\006Escape\022\017.protobuf.IDMsg\032\021.pro" | |||
| "tobuf.BoolResb\006proto3"; | |||
| static const ::_pbi::DescriptorTable* const descriptor_table_Services_2eproto_deps[2] = { | |||
| &::descriptor_table_Message2Clients_2eproto, | |||
| &::descriptor_table_Message2Server_2eproto, | |||
| @@ -61,7 +64,7 @@ static ::_pbi::once_flag descriptor_table_Services_2eproto_once; | |||
| const ::_pbi::DescriptorTable descriptor_table_Services_2eproto = { | |||
| false, | |||
| false, | |||
| 914, | |||
| 1021, | |||
| descriptor_table_protodef_Services_2eproto, | |||
| "Services.proto", | |||
| &descriptor_table_Services_2eproto_once, | |||
| @@ -16,9 +16,8 @@ message MessageOfHuman | |||
| PropType prop = 8; | |||
| HumanType human_type = 9; | |||
| int64 guid = 10; | |||
| bool on_chair = 11; // 是否被挂 | |||
| HumanState state = 11; | |||
| double chair_time = 12; // 被挂的时间 | |||
| bool on_ground = 13; // 是否倒地 | |||
| double ground_time = 14; // 倒地时间 | |||
| int64 player_id = 15; | |||
| int32 view_range = 16; // 视野距离 | |||
| @@ -43,6 +43,16 @@ enum HumanBuffType // 人类可用的增益效果类型 | |||
| HBUFFTYPE4 = 4; | |||
| } | |||
| enum HumanState | |||
| { | |||
| NULL_STATUS = 0; | |||
| IDLE = 1; // 正常状态 | |||
| FIXING = 2; // 修理状态 | |||
| DYING = 3; // 濒死状态 | |||
| ON_CHAIR = 4; // 被挂 | |||
| DEAD = 5; // 死亡状态 | |||
| } | |||
| enum ButcherBuffType // 屠夫可用的增益效果类型 | |||
| { | |||
| NULL_BBUFF_TYPE = 0; | |||
| @@ -0,0 +1,34 @@ | |||
| <Project Sdk="Microsoft.NET.Sdk"> | |||
| <PropertyGroup> | |||
| <TargetFramework>net6.0</TargetFramework> | |||
| <ImplicitUsings>enable</ImplicitUsings> | |||
| <Nullable>enable</Nullable> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <None Remove="Message2Clients.proto" /> | |||
| <None Remove="Message2Server.proto" /> | |||
| <None Remove="MessageType.proto" /> | |||
| <None Remove="Services.proto" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <PackageReference Include="Google.Protobuf" Version="3.21.9" /> | |||
| <PackageReference Include="Google.Protobuf.Tools" Version="3.21.9" /> | |||
| <PackageReference Include="Grpc" Version="2.46.5" /> | |||
| <PackageReference Include="Grpc.Core" Version="2.46.5" /> | |||
| <PackageReference Include="Grpc.Tools" Version="2.50.0"> | |||
| <PrivateAssets>all</PrivateAssets> | |||
| <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||
| </PackageReference> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Protobuf Include="Message2Clients.proto" /> | |||
| <Protobuf Include="Message2Server.proto" /> | |||
| <Protobuf Include="MessageType.proto" /> | |||
| <Protobuf Include="Services.proto" /> | |||
| </ItemGroup> | |||
| </Project> | |||
| @@ -19,8 +19,10 @@ service AvailableService | |||
| rpc SendMessage(SendMsg) returns (BoolRes); | |||
| rpc HaveMessage(IDMsg) returns (BoolRes); | |||
| rpc GetMessage(IDMsg) returns (MsgRes); | |||
| rpc FixMachine(stream IDMsg) returns (stream BoolRes); // 若正常修复且未被打断则返回修复成功,位置错误/被打断则返回修复失败,下同 | |||
| rpc SaveHuman(stream IDMsg) returns (stream BoolRes); | |||
| rpc StartFixMachine(IDMsg) returns (BoolRes); // 开始修理机器 | |||
| rpc EndFixMachine(IDMsg) returns (BoolRes); // 主动停止修复 | |||
| rpc StartSaveHuman(IDMsg) returns (BoolRes); // 开始救人 | |||
| rpc EndSaveHuman(IDMsg) returns (BoolRes); // 主动停止救人 | |||
| rpc Attack (AttackMsg) returns (BoolRes); | |||
| rpc CarryHuman (IDMsg) returns (BoolRes); | |||
| rpc ReleaseHuman (IDMsg) returns (BoolRes); | |||
| @@ -1,7 +1,10 @@ | |||
| for i in {1..10} | |||
| SHELL_FOLDER=$(dirname $(readlink -f "$0")) | |||
| cd $SHELL_FOLDER | |||
| cd ../.. | |||
| for i in {1..3} | |||
| do | |||
| find . -iname "*.cs" \ | |||
| -or -iname "*.c" \ | |||
| find . -iname "*.c" \ | |||
| -or -iname "*.h" \ | |||
| -or -iname "*.C" \ | |||
| -or -iname "*.H" \ | |||
| @@ -19,3 +22,10 @@ find . -iname "*.cs" \ | |||
| -or -iname "*.i++" \ | |||
| | xargs clang-format -i | |||
| done | |||
| cd logic && dotnet format && cd .. | |||
| cd installer && dotnet format && cd .. | |||
| cd launcher && dotnet format && cd .. | |||
| cd playback && dotnet format && cd .. | |||
| echo "Done!" | |||
| @@ -1,6 +1,6 @@ | |||
| using System.Windows; | |||
| [assembly:ThemeInfo( | |||
| [assembly: ThemeInfo( | |||
| ResourceDictionaryLocation.None, // where theme specific resource dictionaries are located | |||
| //(used if a resource is not found in the page, | |||
| // or application resource dictionaries) | |||
| @@ -26,15 +26,21 @@ namespace starter.viewmodel.settings | |||
| /// <summary> | |||
| /// Route of files | |||
| /// </summary> | |||
| public string Route { | |||
| get; set; } | |||
| public string Route | |||
| { | |||
| get; set; | |||
| } | |||
| /// <summary> | |||
| /// if the route was set or is under editing | |||
| /// </summary> | |||
| public bool HaveRoute { | |||
| get; set; } | |||
| public bool EditingRoute { | |||
| get; set; } | |||
| public bool HaveRoute | |||
| { | |||
| get; set; | |||
| } | |||
| public bool EditingRoute | |||
| { | |||
| get; set; | |||
| } | |||
| /// <summary> | |||
| /// downloader function | |||
| /// </summary> | |||
| @@ -144,7 +150,8 @@ namespace Downloader | |||
| GetObjectRequest request = new GetObjectRequest(bucket, key, localDir, localFileName); | |||
| Dictionary<string, string> test = request.GetRequestHeaders(); | |||
| request.SetCosProgressCallback(delegate(long completed, long total) { | |||
| request.SetCosProgressCallback(delegate (long completed, long total) | |||
| { | |||
| Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); | |||
| }); | |||
| // 执行请求 | |||
| @@ -22,10 +22,12 @@ namespace starter.viewmodel.settings | |||
| public string Route | |||
| { | |||
| get { | |||
| get | |||
| { | |||
| return obj.Route; | |||
| } | |||
| set { | |||
| set | |||
| { | |||
| obj.Route = value; | |||
| this.RaisePropertyChanged("Route"); | |||
| } | |||
| @@ -33,10 +35,12 @@ namespace starter.viewmodel.settings | |||
| public bool CanEditRoute // if the user can still edit install route | |||
| { | |||
| get { | |||
| get | |||
| { | |||
| return !obj.HaveRoute; | |||
| } | |||
| set { | |||
| set | |||
| { | |||
| obj.HaveRoute = !value; | |||
| obj.EditingRoute = value; | |||
| this.RaisePropertyChanged("CanEditRoute"); | |||
| @@ -46,7 +50,8 @@ namespace starter.viewmodel.settings | |||
| private BaseCommand clickBrowseCommand; | |||
| public BaseCommand ClickBrowseCommand | |||
| { | |||
| get { | |||
| get | |||
| { | |||
| if (clickBrowseCommand == null) | |||
| { | |||
| clickBrowseCommand = new BaseCommand(new Action<object>(o => | |||
| @@ -54,28 +59,29 @@ namespace starter.viewmodel.settings | |||
| using (FolderBrowserDialog dialog = new FolderBrowserDialog()) | |||
| { | |||
| _ = dialog.ShowDialog(); | |||
| if (dialog.SelectedPath != String.Empty) | |||
| Route = dialog.SelectedPath; | |||
| if (dialog.SelectedPath != String.Empty) | |||
| Route = dialog.SelectedPath; | |||
| } | |||
| })); | |||
| } | |||
| })); | |||
| } | |||
| return clickBrowseCommand; | |||
| } | |||
| } | |||
| private BaseCommand clickConfirmCommand; | |||
| public BaseCommand ClickConfirmCommand | |||
| { | |||
| get { | |||
| if (clickConfirmCommand == null) | |||
| return clickBrowseCommand; | |||
| } | |||
| } | |||
| private BaseCommand clickConfirmCommand; | |||
| public BaseCommand ClickConfirmCommand | |||
| { | |||
| get | |||
| { | |||
| if (clickConfirmCommand == null) | |||
| { | |||
| clickConfirmCommand = new BaseCommand(new Action<object>(o => | |||
| { | |||
| CanEditRoute = false; | |||
| obj.install(); | |||
| })); | |||
| } | |||
| obj.install(); | |||
| })); | |||
| } | |||
| return clickConfirmCommand; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| using System.Windows; | |||
| [assembly:ThemeInfo( | |||
| [assembly: ThemeInfo( | |||
| ResourceDictionaryLocation.None, // where theme specific resource dictionaries are located | |||
| //(used if a resource is not found in the page, | |||
| // or application resource dictionaries) | |||
| @@ -0,0 +1,20 @@ | |||
| <Project Sdk="Microsoft.NET.Sdk"> | |||
| <PropertyGroup> | |||
| <OutputType>Exe</OutputType> | |||
| <TargetFramework>net6.0</TargetFramework> | |||
| <ImplicitUsings>enable</ImplicitUsings> | |||
| <Nullable>enable</Nullable> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <PackageReference Include="Google.Protobuf" Version="3.21.9" /> | |||
| <PackageReference Include="Grpc" Version="2.46.5" /> | |||
| <PackageReference Include="Grpc.Core" Version="2.46.5" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ProjectReference Include="..\..\dependency\proto\Protos.csproj" /> | |||
| </ItemGroup> | |||
| </Project> | |||
| @@ -0,0 +1,36 @@ | |||
| using Grpc.Core; | |||
| using Protobuf; | |||
| namespace ClientTest | |||
| { | |||
| public class Program | |||
| { | |||
| public static async Task Main(string[] args) | |||
| { | |||
| Channel channel = new Channel("0.0.0.0:8888", ChannelCredentials.Insecure); | |||
| var client = new AvailableService.AvailableServiceClient(channel); | |||
| PlayerMsg playerInfo = new(); | |||
| playerInfo.PlayerId = Convert.ToInt32(args[0]); | |||
| playerInfo.PlayerType = (PlayerType)Convert.ToInt32(args[1]); | |||
| var call = client.AddPlayer(playerInfo); | |||
| while (await call.ResponseStream.MoveNext()) | |||
| { | |||
| var currentGameInfo = call.ResponseStream.Current; | |||
| if (playerInfo.PlayerType == PlayerType.HumanPlayer) | |||
| { | |||
| for (int i = 0; i < currentGameInfo.HumanMessage.Count; i++) | |||
| { | |||
| Console.WriteLine($"Human is at ({currentGameInfo.HumanMessage[i].X}, {currentGameInfo.HumanMessage[i].Y})"); | |||
| } | |||
| } | |||
| if (playerInfo.PlayerType == PlayerType.ButcherPlayer) | |||
| { | |||
| for (int i = 0; i < currentGameInfo.ButcherMessage.Count; i++) | |||
| { | |||
| Console.WriteLine($"Butcher is at ({currentGameInfo.ButcherMessage[i].X}, {currentGameInfo.ButcherMessage[i].Y})"); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,105 @@ | |||
| using Grpc.Core; | |||
| using Protobuf; | |||
| using System.Threading; | |||
| using Timothy.FrameRateTask; | |||
| using System; | |||
| using System.Net.Http.Headers; | |||
| namespace Server | |||
| { | |||
| public class Game | |||
| { | |||
| private const int gameTime = 3000; | |||
| public int GameTime => gameTime; | |||
| private MessageToClient gameInfo = new(); | |||
| private object gameInfoLock = new(); | |||
| private int isGaming = 0; | |||
| public bool IsGaming | |||
| { | |||
| get => Interlocked.CompareExchange(ref isGaming, 0, 0) != 0; | |||
| set => Interlocked.Exchange(ref isGaming, value ? 1 : 0); | |||
| } | |||
| public MessageToClient GetCopiedGameInfo() | |||
| { | |||
| lock (gameInfoLock) | |||
| { | |||
| return gameInfo.Clone(); | |||
| } | |||
| } | |||
| public void AddPlayer(PlayerMsg player) | |||
| { | |||
| lock (gameInfoLock) | |||
| { | |||
| if (player.PlayerType == PlayerType.NullPlayerType) | |||
| return; | |||
| if (player.PlayerType == PlayerType.HumanPlayer) | |||
| { | |||
| gameInfo.HumanMessage.Add(new MessageOfHuman() | |||
| { | |||
| PlayerId = player.PlayerId | |||
| }); | |||
| return; | |||
| } | |||
| if (player.PlayerType == PlayerType.ButcherPlayer) | |||
| { | |||
| gameInfo.ButcherMessage.Add(new MessageOfButcher() | |||
| { | |||
| PlayerID = player.PlayerId | |||
| }); | |||
| return; | |||
| } | |||
| } | |||
| } | |||
| public SemaphoreSlim StartGame() | |||
| { | |||
| IsGaming = true; | |||
| var waitHandle = new SemaphoreSlim(0); | |||
| new Thread | |||
| ( | |||
| () => | |||
| { | |||
| new FrameRateTaskExecutor<int> | |||
| ( | |||
| () => IsGaming, | |||
| () => | |||
| { | |||
| lock (gameInfo) | |||
| { | |||
| for (int i = 0; i < gameInfo.HumanMessage.Count; i++) | |||
| { | |||
| if (gameInfo.HumanMessage[i] != null) | |||
| { | |||
| gameInfo.HumanMessage[i].X++; | |||
| gameInfo.HumanMessage[i].Y--; | |||
| } | |||
| } | |||
| for (int i = 0; i < gameInfo.ButcherMessage.Count; i++) | |||
| { | |||
| if (gameInfo.ButcherMessage[i] != null) | |||
| { | |||
| gameInfo.ButcherMessage[i].X--; | |||
| gameInfo.ButcherMessage[i].Y++; | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| 100, | |||
| () => | |||
| { | |||
| IsGaming = false; | |||
| waitHandle.Release(); | |||
| return 0; | |||
| }, | |||
| gameTime | |||
| ).Start(); | |||
| } | |||
| ) | |||
| { IsBackground = true }.Start(); | |||
| return waitHandle; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,120 @@ | |||
| using Grpc.Core; | |||
| using Protobuf; | |||
| using System.Threading; | |||
| using Timothy.FrameRateTask; | |||
| using System; | |||
| using System.Net.Http.Headers; | |||
| namespace Server | |||
| { | |||
| public class GameServer : AvailableService.AvailableServiceBase | |||
| { | |||
| private Dictionary<long, (SemaphoreSlim, SemaphoreSlim)> semaDict = new(); | |||
| private object gameLock = new(); | |||
| private const int playerNum = 1; | |||
| private MessageToClient currentGameInfo = new(); | |||
| private Game game = new(); | |||
| public int GameTime => game.GameTime; | |||
| private SemaphoreSlim endGameSem = new(0); | |||
| public override Task<BoolRes> TryConnection(IDMsg request, ServerCallContext context) | |||
| { | |||
| var onConnection = new BoolRes(); | |||
| lock (gameLock) | |||
| { | |||
| // if (0 <= request.PlayerId && request.PlayerId < playerNum) | |||
| { | |||
| onConnection.ActSuccess = true; | |||
| return Task.FromResult(onConnection); | |||
| } | |||
| } | |||
| onConnection.ActSuccess = false; | |||
| return Task.FromResult(onConnection); | |||
| } | |||
| public override async Task AddPlayer(PlayerMsg request, IServerStreamWriter<MessageToClient> responseStream, ServerCallContext context) | |||
| { | |||
| lock (gameLock) | |||
| { | |||
| if (game.IsGaming) | |||
| return; | |||
| game.AddPlayer(request); | |||
| var temp = (new SemaphoreSlim(0, 1), new SemaphoreSlim(0, 1)); | |||
| bool start = false; | |||
| Console.WriteLine($"Id: {request.PlayerId} joins."); | |||
| lock (semaDict) | |||
| { | |||
| semaDict.Add(request.PlayerId, temp); | |||
| start = semaDict.Count == playerNum; | |||
| } | |||
| if (start) | |||
| { | |||
| Console.WriteLine("Game starts!"); | |||
| StartGame(); | |||
| } | |||
| } | |||
| do | |||
| { | |||
| semaDict[request.PlayerId].Item1.Wait(); | |||
| if (currentGameInfo != null) | |||
| { | |||
| await responseStream.WriteAsync(currentGameInfo); | |||
| Console.WriteLine("Send!"); | |||
| } | |||
| semaDict[request.PlayerId].Item2.Release(); | |||
| } while (game.IsGaming); | |||
| } | |||
| public void StartGame() | |||
| { | |||
| var waitHandle = game.StartGame(); | |||
| new Thread(() => | |||
| { | |||
| new FrameRateTaskExecutor<int> | |||
| ( | |||
| () => game.IsGaming, | |||
| ReportGame, | |||
| 1000, | |||
| () => | |||
| { | |||
| ReportGame(); // 最后发一次消息,唤醒发消息的线程,防止发消息的线程由于有概率处在 Wait 状态而卡住 | |||
| return 0; | |||
| } | |||
| ).Start(); | |||
| }) | |||
| { IsBackground = true }.Start(); | |||
| new Thread(() => | |||
| { | |||
| waitHandle.Wait(); | |||
| this.endGameSem.Release(); | |||
| }) | |||
| { IsBackground = true }.Start(); | |||
| } | |||
| public void WaitForEnd() | |||
| { | |||
| this.endGameSem.Wait(); | |||
| } | |||
| public void ReportGame() | |||
| { | |||
| currentGameInfo = game.GetCopiedGameInfo(); | |||
| foreach (var kvp in semaDict) | |||
| { | |||
| kvp.Value.Item1.Release(); | |||
| } | |||
| foreach (var kvp in semaDict) | |||
| { | |||
| kvp.Value.Item2.Wait(); | |||
| } | |||
| } | |||
| public GameServer() | |||
| { | |||
| } | |||
| } | |||
| } | |||
| @@ -1,2 +1,35 @@ | |||
| // See https://aka.ms/new-console-template for more information | |||
| Console.WriteLine("Hello, World!"); | |||
| using Grpc.Core; | |||
| using Protobuf; | |||
| using System.Threading; | |||
| using Timothy.FrameRateTask; | |||
| using System; | |||
| using System.Net.Http.Headers; | |||
| namespace Server | |||
| { | |||
| public class Program | |||
| { | |||
| public static void Main() | |||
| { | |||
| try | |||
| { | |||
| GameServer gameServer = new(); | |||
| Grpc.Core.Server server = new Grpc.Core.Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) }) | |||
| { | |||
| Services = { AvailableService.BindService(gameServer) }, | |||
| Ports = { new ServerPort("0.0.0.0", 8888, ServerCredentials.Insecure) } | |||
| }; | |||
| server.Start(); | |||
| Console.WriteLine("Server begins to listen!"); | |||
| gameServer.WaitForEnd(); | |||
| Console.WriteLine("Server end!"); | |||
| server.ShutdownAsync().Wait(); | |||
| } | |||
| catch (Exception ex) | |||
| { | |||
| Console.WriteLine(ex.ToString()); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -7,4 +7,19 @@ | |||
| <Nullable>enable</Nullable> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <PackageReference Include="FrameRateTask" Version="1.1.2" /> | |||
| <PackageReference Include="Google.Protobuf" Version="3.21.9" /> | |||
| <PackageReference Include="Grpc" Version="2.46.5" /> | |||
| <PackageReference Include="Grpc.Core" Version="2.46.5" /> | |||
| <PackageReference Include="Grpc.Tools" Version="2.50.0"> | |||
| <PrivateAssets>all</PrivateAssets> | |||
| <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||
| </PackageReference> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ProjectReference Include="..\..\dependency\proto\Protos.csproj" /> | |||
| </ItemGroup> | |||
| </Project> | |||
| @@ -5,6 +5,10 @@ VisualStudioVersion = 17.0.32014.148 | |||
| MinimumVisualStudioVersion = 10.0.40219.1 | |||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{D033B809-2FB7-4340-B8B4-DDA30D6CA6FF}" | |||
| EndProject | |||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientTest", "ClientTest\ClientTest.csproj", "{F3C98717-DD4F-45B8-B0F0-C217E7E2B5D4}" | |||
| EndProject | |||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Protos", "..\dependency\proto\Protos.csproj", "{9ADA1EF8-DF2F-4C2E-9DE2-BC94DF89B44D}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug|Any CPU = Debug|Any CPU | |||
| @@ -15,6 +19,14 @@ Global | |||
| {D033B809-2FB7-4340-B8B4-DDA30D6CA6FF}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
| {D033B809-2FB7-4340-B8B4-DDA30D6CA6FF}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
| {D033B809-2FB7-4340-B8B4-DDA30D6CA6FF}.Release|Any CPU.Build.0 = Release|Any CPU | |||
| {F3C98717-DD4F-45B8-B0F0-C217E7E2B5D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
| {F3C98717-DD4F-45B8-B0F0-C217E7E2B5D4}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
| {F3C98717-DD4F-45B8-B0F0-C217E7E2B5D4}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
| {F3C98717-DD4F-45B8-B0F0-C217E7E2B5D4}.Release|Any CPU.Build.0 = Release|Any CPU | |||
| {9ADA1EF8-DF2F-4C2E-9DE2-BC94DF89B44D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
| {9ADA1EF8-DF2F-4C2E-9DE2-BC94DF89B44D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
| {9ADA1EF8-DF2F-4C2E-9DE2-BC94DF89B44D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
| {9ADA1EF8-DF2F-4C2E-9DE2-BC94DF89B44D}.Release|Any CPU.Build.0 = Release|Any CPU | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| @@ -0,0 +1,7 @@ | |||
| @echo off | |||
| start cmd /k .\Server\bin\Debug\net6.0\Server.exe | |||
| start cmd /k .\ClientTest\bin\Debug\net6.0\ClientTest.exe 0 1 | |||
| start cmd /k .\ClientTest\bin\Debug\net6.0\ClientTest.exe 1 2 | |||