1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
import sys
from cffi import FFI
prefix: str = {"win32": ""}.get(sys.platform, "lib")
extension: str = {"darwin": ".dylib", "win32": ".dll"}.get(sys.platform, ".so")
ffi = FFI()
ffi.cdef(
"""
extern const char *SENPY_CLUB_API_BASE_URL;
extern int SENPY_CLUB_API_CURRENT_VERSION;
extern const char *SENPY_CLUB_API_URL;
struct Random { char *language; char *image; };
char **language(const char *);
char **languages(void);
struct Random *random_new(void);
void random_populate(struct Random *);
void random_free(struct Random *);
char *random_get(const struct Random *, const char *);
int status(void);
"""
)
C = ffi.dlopen("target/debug/{}senpy_ffi{}".format(prefix, extension))
# languages
languages = C.languages()
languages_list: list[str] = []
for i in range(int(ffi.string(languages[0]))):
languages_list.append(ffi.string(languages[i]).decode("utf-8"))
languages_list.pop(0)
print("languages:", languages_list)
# random
class Random:
def __init__(self) -> None:
self.obj = C.random_new()
def __enter__(self):
return self
def __exit__(self, _, __, ___) -> None:
C.random_free(self.obj)
def populate(self) -> None:
C.random_populate(self.obj)
def get(self) -> (str, str):
return (
ffi.string(C.random_get(self.obj, "language".encode("utf-8"))).decode("utf-8"),
ffi.string(C.random_get(self.obj, "image".encode("utf-8"))).decode("utf-8"),
)
with Random() as random:
random.populate()
print("random:", random.get())
# status
c_status: int = C.status()
status: str = ""
if c_status == 1:
status = "up"
elif c_status == 0:
status = "down"
elif c_status == -1:
status = "not down, but unreachable"
else:
status = "unknown"
print("status: api.senpy.club is", status)
# language
images = C.language("ASM".encode("utf-8"))
images_list: list[str] = []
for i in range(int(ffi.string(images[0]))):
images_list.append(ffi.string(images[i]).decode("utf-8"))
images_list.pop(0)
print("images:", images_list)
print("api base url:", ffi.string(C.SENPY_CLUB_API_BASE_URL).decode("utf-8"))
print("api current version:", int(C.SENPY_CLUB_API_CURRENT_VERSION))
print("api url:", ffi.string(C.SENPY_CLUB_API_URL).decode("utf-8"))
|