197 lines
5.7 KiB
Plaintext
197 lines
5.7 KiB
Plaintext
// net.fox - Продвинутая сетевая библиотека FoxLang с FastAPI-подобным функционалом
|
|
// Подключается через: include("net.fox");
|
|
|
|
// === FASTAPI-ПОДОБНЫЙ ВЕБ СЕРВЕР ===
|
|
|
|
global int server_port = 8000;
|
|
global bool server_running = false;
|
|
|
|
// Запуск сервера на указанном порту
|
|
void start_server(int port) {
|
|
server_port = port;
|
|
string result = server_start(port);
|
|
server_running = true;
|
|
print("🚀 Server started on http://localhost:" + port);
|
|
print(result);
|
|
}
|
|
|
|
// Остановка сервера
|
|
void stop_server() {
|
|
if (server_running) {
|
|
string result = server_stop();
|
|
server_running = false;
|
|
print("🛑 Server stopped");
|
|
print(result);
|
|
} else {
|
|
print("❌ Server is not running");
|
|
}
|
|
}
|
|
|
|
// Регистрация GET маршрута
|
|
void register_get(string path, string handler_name) {
|
|
if (!server_running) {
|
|
print("⚠️ Warning: Server not started. Call start_server() first");
|
|
}
|
|
string result = route_get(path, handler_name);
|
|
print("📥 GET " + path + " -> " + handler_name);
|
|
}
|
|
|
|
// Регистрация POST маршрута
|
|
void register_post(string path, string handler_name) {
|
|
if (!server_running) {
|
|
print("⚠️ Warning: Server not started. Call start_server() first");
|
|
}
|
|
string result = route_post(path, handler_name);
|
|
print("📤 POST " + path + " -> " + handler_name);
|
|
}
|
|
|
|
// Отправка JSON ответа
|
|
void json_response(string json_data) {
|
|
send_response(json_data);
|
|
}
|
|
|
|
// Отправка текстового ответа
|
|
void text_response(string text) {
|
|
string json = "{\"message\":\"" + text + "\"}";
|
|
send_response(json);
|
|
}
|
|
|
|
// === ПРИМЕРЫ ОБРАБОТЧИКОВ ===
|
|
|
|
// Простой обработчик для главной страницы
|
|
void home_handler() {
|
|
json_response("{\"message\":\"Welcome to FoxLang API!\",\"version\":\"5.0.1\"}");
|
|
}
|
|
|
|
// Обработчик для API статуса
|
|
void status_handler() {
|
|
json_response("{\"status\":\"ok\",\"server\":\"FoxLang\",\"port\":" + server_port + "}");
|
|
}
|
|
|
|
// Обработчик для пользователей
|
|
void users_handler() {
|
|
json_response("{\"users\":[{\"id\":1,\"name\":\"Alice\"},{\"id\":2,\"name\":\"Bob\"}]}");
|
|
}
|
|
|
|
// Обработчик для создания пользователя
|
|
void create_user_handler() {
|
|
text_response("User created successfully");
|
|
}
|
|
|
|
// === БЫСТРЫЙ СТАРТ СЕРВЕРА ===
|
|
|
|
void quick_start() {
|
|
print("🦊 Starting FoxLang FastAPI Server...");
|
|
|
|
// Запуск сервера
|
|
start_server(8000);
|
|
|
|
// Регистрация маршрутов
|
|
register_get("/", "home_handler");
|
|
register_get("/status", "status_handler");
|
|
register_get("/users", "users_handler");
|
|
register_post("/users", "create_user_handler");
|
|
|
|
print("✅ Server configured with routes:");
|
|
print(" GET / -> Welcome page");
|
|
print(" GET /status -> Server status");
|
|
print(" GET /users -> List users");
|
|
print(" POST /users -> Create user");
|
|
print("");
|
|
print("🌐 Visit: http://localhost:8000");
|
|
print("⏹️ To stop: stop_server()");
|
|
}
|
|
|
|
// === РАСШИРЕННЫЕ HTTP ФУНКЦИИ ===
|
|
|
|
// === РАСШИРЕННЫЕ HTTP ФУНКЦИИ ===
|
|
|
|
// HTTP GET запрос (встроенная функция httpget уже реализована)
|
|
string http_get_simple(string url) {
|
|
string response = httpget(url);
|
|
if (response == "") {
|
|
print("ERROR: Failed to fetch " + url);
|
|
return "{}";
|
|
}
|
|
return response;
|
|
}
|
|
|
|
// POST с JSON данными (используем встроенную httppost)
|
|
string post_json(string url, string json_data) {
|
|
string response = httppost(url, json_data, "application/json");
|
|
if (response == "") {
|
|
print("ERROR: Failed to POST to " + url);
|
|
return "{}";
|
|
}
|
|
return response;
|
|
}
|
|
|
|
// === API КЛИЕНТ ===
|
|
|
|
// REST API клиент
|
|
string api_get(string base_url, string endpoint) {
|
|
return http_get_simple(base_url + endpoint);
|
|
}
|
|
|
|
string api_post(string base_url, string endpoint, string data) {
|
|
return post_json(base_url + endpoint, data);
|
|
}
|
|
|
|
// === УТИЛИТЫ ===
|
|
|
|
// Получение публичного IP
|
|
string get_public_ip() {
|
|
return http_get_simple("https://api.ipify.org");
|
|
}
|
|
|
|
// Отправка webhook
|
|
bool send_webhook(string url, string message) {
|
|
string json = "{\"text\":\"" + message + "\"}";
|
|
string response = post_json(url, json);
|
|
return true; // Упрощено для совместимости
|
|
}
|
|
|
|
// === ДЕМО ФУНКЦИИ ===
|
|
|
|
void demo_server() {
|
|
print("=== FastAPI Demo ===");
|
|
quick_start();
|
|
|
|
// Ждем немного для запуска сервера
|
|
wait(2000);
|
|
|
|
// Тестируем API
|
|
print("🧪 Testing API endpoints...");
|
|
|
|
string home = http_get_simple("http://localhost:8000/");
|
|
print("Home: " + home);
|
|
|
|
string status = http_get_simple("http://localhost:8000/status");
|
|
print("Status: " + status);
|
|
|
|
string users = http_get_simple("http://localhost:8000/users");
|
|
print("Users: " + users);
|
|
}
|
|
|
|
void demo_client() {
|
|
print("=== HTTP Client Demo ===");
|
|
|
|
string ip = get_public_ip();
|
|
print("Your IP: " + ip);
|
|
|
|
// Тест внешнего API
|
|
string response = api_get("https://jsonplaceholder.typicode.com", "/posts/1");
|
|
print("External API: " + response);
|
|
}
|
|
|
|
// === ОСНОВНАЯ ДЕМО ФУНКЦИЯ ===
|
|
|
|
void net_demo() {
|
|
print("🦊 FoxLang Network Library Demo");
|
|
print("================================");
|
|
|
|
demo_client();
|
|
print("");
|
|
demo_server();
|
|
}
|