Mercurial > minori
comparison dep/animia/src/animia.cc @ 139:478f3b366199
dep/animia: separate lots of things, use base class for OS stuff
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Sun, 12 Nov 2023 16:43:07 -0500 |
| parents | 28842a8d0c6b |
| children | 1e696863b54c |
comparison
equal
deleted
inserted
replaced
| 138:28842a8d0c6b | 139:478f3b366199 |
|---|---|
| 2 #include <vector> | 2 #include <vector> |
| 3 | 3 |
| 4 #include <windows.h> | 4 #include <windows.h> |
| 5 | 5 |
| 6 #include "animia.h" | 6 #include "animia.h" |
| 7 #include "animia/util.h" | |
| 8 #include "animia/strategies.h" | 7 #include "animia/strategies.h" |
| 8 #include "animia/types.h" | |
| 9 | |
| 9 #ifdef ANIMIA_ON_WIN32 | 10 #ifdef ANIMIA_ON_WIN32 |
| 10 #include "animia/fd/win32.h" | 11 # include "animia/fd/win32.h" |
| 12 #elif defined(ANIMIA_ON_LINUX) | |
| 13 # include "animia/fd/linux.h" | |
| 14 #elif defined(ANIMIA_ON_UNIX) | |
| 15 # include "animia/fd/bsd.h" | |
| 11 #endif | 16 #endif |
| 17 | |
| 18 namespace animia::internal { | |
| 19 | |
| 20 /* really stupid hack to get fd to point to the right | |
| 21 thing */ | |
| 22 #ifdef ANIMIA_ON_WIN32 | |
| 23 win32::Win32FdTools os_fd; | |
| 24 #elif defined(ANIMIA_ON_LINUX) | |
| 25 linux::LinuxFdTools os_fd; | |
| 26 #elif defined(ANIMIA_ON_UNIX) | |
| 27 unix::UnixFdTools os_fd; | |
| 28 #else | |
| 29 BaseFdTools os_fd; | |
| 30 #endif | |
| 31 | |
| 32 BaseFdTools& fd = os_fd; | |
| 33 | |
| 34 } | |
| 35 | |
| 12 #include <iostream> | 36 #include <iostream> |
| 13 | 37 |
| 14 namespace animia { | 38 namespace animia { |
| 15 | 39 |
| 16 static bool ProcessInPlayers(const std::vector<Player>& players, const std::string& name, Player& player_) { | 40 static bool ProcessInPlayers(const std::vector<Player>& players, const std::string& name, Player& player_) { |
| 24 } | 48 } |
| 25 return false; | 49 return false; |
| 26 } | 50 } |
| 27 | 51 |
| 28 bool GetResults(const std::vector<Player>& players, std::vector<Result>& results) { | 52 bool GetResults(const std::vector<Player>& players, std::vector<Result>& results) { |
| 29 std::set<pid_t> pids; | 53 std::set<internal::pid_t> pids; |
| 30 | 54 |
| 31 #ifdef ANIMIA_ON_WIN32 | 55 if (!internal::fd.GetAllPids(pids)) |
| 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; | 56 return false; |
| 41 | 57 |
| 42 for (const auto& pid : pids) { | 58 for (const auto& pid : pids) { |
| 43 std::string name; | 59 std::string name; |
| 44 #ifdef ANIMIA_ON_WIN32 | 60 internal::fd.GetProcessName(pid, name); |
| 45 animia::internal::win32::GetProcessName(pid, name); | |
| 46 #endif | |
| 47 | 61 |
| 48 Player player; | 62 Player player; |
| 49 if (!ProcessInPlayers(players, name, player)) | 63 if (!ProcessInPlayers(players, name, player)) |
| 50 continue; | 64 continue; |
| 51 | 65 |
