Files
2026-01-22 21:31:57 +05:00

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();
}