Mercurial > minori
comparison dep/animia/src/animia.cc @ 138:28842a8d0c6b
dep/animia: huge refactor (again...)
but this time, it actually compiles! and it WORKS! (on win32... not sure about
other platforms...)
configuring players is still not supported: at some point I'll prune something
up...
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Sun, 12 Nov 2023 04:53:19 -0500 |
| parents | 69db40272acd |
| children | 478f3b366199 |
comparison
equal
deleted
inserted
replaced
| 137:69db40272acd | 138:28842a8d0c6b |
|---|---|
| 1 #include <string> | |
| 2 #include <vector> | |
| 3 | |
| 4 #include <windows.h> | |
| 5 | |
| 6 #include "animia.h" | |
| 7 #include "animia/util.h" | |
| 8 #include "animia/strategies.h" | |
| 9 #ifdef ANIMIA_ON_WIN32 | |
| 10 #include "animia/fd/win32.h" | |
| 11 #endif | |
| 12 #include <iostream> | |
| 13 | |
| 14 namespace animia { | |
| 15 | |
| 16 static bool ProcessInPlayers(const std::vector<Player>& players, const std::string& name, Player& player_) { | |
| 17 for (const auto& player : players) { | |
| 18 for (const auto& exe : player.executables) { | |
| 19 if (exe == name.substr(0, name.rfind(".exe"))) { | |
| 20 player_ = player; | |
| 21 return true; | |
| 22 } | |
| 23 } | |
| 24 } | |
| 25 return false; | |
| 26 } | |
| 27 | |
| 28 bool GetResults(const std::vector<Player>& players, std::vector<Result>& results) { | |
| 29 std::set<pid_t> pids; | |
| 30 | |
| 31 #ifdef ANIMIA_ON_WIN32 | |
| 32 /* todo: make these functions also return process names in a tuple, | |
| 33 cause the win32 api gives it to us for free! */ | |
| 34 if (!internal::win32::GetAllPids(pids)) | |
| 35 #elif ANIMIA_ON_LINUX | |
| 36 if (!internal::linux::GetAllPids(pids)) | |
| 37 #elif ANIMIA_ON_UNIX | |
| 38 if (!internal::unix::GetAllPids(pids)) | |
| 39 #endif | |
| 40 return false; | |
| 41 | |
| 42 for (const auto& pid : pids) { | |
| 43 std::string name; | |
| 44 #ifdef ANIMIA_ON_WIN32 | |
| 45 animia::internal::win32::GetProcessName(pid, name); | |
| 46 #endif | |
| 47 | |
| 48 Player player; | |
| 49 if (!ProcessInPlayers(players, name, player)) | |
| 50 continue; | |
| 51 | |
| 52 Result result; | |
| 53 result.process.pid = pid; | |
| 54 result.process.name = name; | |
| 55 result.player = player; | |
| 56 results.push_back(result); | |
| 57 } | |
| 58 | |
| 59 return internal::ApplyStrategies(results); | |
| 60 } | |
| 61 | |
| 62 } |
