diff --git a/client/lib/main.dart b/client/lib/main.dart index 5b7e104..fcece66 100644 --- a/client/lib/main.dart +++ b/client/lib/main.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:client/screens/mainMenu.dart'; import 'package:client/theme.dart'; +import 'package:client/screens/networkDebug.dart'; -Widget currentScreen = MainMenu(); +Widget currentScreen = NetworkDebug(); void main() { runApp(const MyApp()); diff --git a/client/lib/networkManager.dart b/client/lib/networkManager.dart new file mode 100644 index 0000000..3773e94 --- /dev/null +++ b/client/lib/networkManager.dart @@ -0,0 +1,34 @@ +import 'package:http/http.dart' as http; +import 'package:shared/models/message.dart'; + +class NetworkManager { + final String baseUrl = "https://msg.mr-potato.ru"; + + Future send(Message message) async { + final url = Uri.parse('$baseUrl/send'); + + print('Отправка запроса на $url...'); + + try { + + final response = await http.post( + url, + headers: { + 'Content-Type': 'application/json', + }, + body: message.toJson(), + ); + + + if (response.statusCode == 200) { + print('Сообщение успешно доставлено!'); + print('Ответ сервера: ${response.body}'); + } else { + print('Ошибка сервера. Код: ${response.statusCode}'); + } + } catch (e) { + + print('Ошибка сети: $e'); + } + } +} \ No newline at end of file diff --git a/client/lib/screens/networkDebug.dart b/client/lib/screens/networkDebug.dart new file mode 100644 index 0000000..db8d5f9 --- /dev/null +++ b/client/lib/screens/networkDebug.dart @@ -0,0 +1,30 @@ +import 'package:client/networkManager.dart'; +import 'package:client/widgets/chatFoloders.dart'; +import 'package:client/widgets/chatItem.dart'; +import 'package:flutter/material.dart'; +import 'package:shared/models/message.dart'; + +class NetworkDebug extends StatelessWidget{ + + NetworkDebug({Key ?key}); + + NetworkManager net = NetworkManager(); + String message = 'NONE'; + + @override + Widget build(BuildContext context) { + final colors = Theme.of(context).colorScheme; + return Scaffold( + backgroundColor: colors.surface, + body: Column( + + children: [ + TextField(decoration: InputDecoration(label: Text('Message')), onChanged: (value) => (message = value),), + TextButton(onPressed: () => net.send(Message(chatId: '123abc', msg: message)), child: Text('Send')) + ], + ), + + ); + } + +} \ No newline at end of file diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 0649de2..8074feb 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -36,6 +36,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 + http: ^1.6.0 dev_dependencies: flutter_test: diff --git a/server/bin/server.dart b/server/bin/server.dart index b145cc5..465fd7a 100644 --- a/server/bin/server.dart +++ b/server/bin/server.dart @@ -1,5 +1,39 @@ -import 'package:server/server.dart' as server; +// server/bin/server.dart +import 'dart:convert'; +import 'dart:io'; +import 'package:shelf/shelf.dart'; +import 'package:shelf/shelf_io.dart' as io; +import 'package:shelf_router/shelf_router.dart'; -void main(List arguments) { - print('Hello world: ${server.calculate()}!'); -} +// Подключаем нашу модель (путь зависит от того, как назван твой пакет shared в pubspec) +import 'package:shared/models/message.dart'; + +void main() async { + final router = Router(); + + // Настраиваем обработчик POST-запроса на адрес /send + router.post('/send', (Request request) async { + // Читаем тело запроса (в виде строки) + final payload = await request.readAsString(); + + // Превращаем строку JSON обратно в объект Message + final message = Message.fromJson(payload); + + print('📩 Получено новое сообщение!'); + print('--> Чат: ${message.chatId}'); + print('--> Текст: ${message.msg}'); + + // Возвращаем ответ клиенту (Статус 200 OK) + return Response.ok( + jsonEncode({'status': 'ok'}), + headers: {'Content-Type': 'application/json'}, + ); + }); + + // Pipeline добавляет удобное логирование каждого запроса в консоль + final handler = Pipeline().addMiddleware(logRequests()).addHandler(router.call); + + // Запускаем сервер на всех интерфейсах (0.0.0.0) и порту 6432 + final server = await io.serve(handler, '0.0.0.0', 6432); + print('🚀 Сервер запущен на http://${server.address.host}:${server.port}'); +} \ No newline at end of file diff --git a/server/pubspec.yaml b/server/pubspec.yaml index 8703079..6ef12a3 100644 --- a/server/pubspec.yaml +++ b/server/pubspec.yaml @@ -9,8 +9,9 @@ environment: # Add regular dependencies here. dependencies: path: ^1.9.0 -potato_messenger_shared: - path: ../shared + shared: + path: ../shared + shelf_router: ^1.1.4 dev_dependencies: lints: ^6.0.0 diff --git a/shared/lib/models/message.dart b/shared/lib/models/message.dart new file mode 100644 index 0000000..7246ecc --- /dev/null +++ b/shared/lib/models/message.dart @@ -0,0 +1,29 @@ +// shared/lib/models/message.dart +import 'dart:convert'; + +class Message { + final String chatId; + final String msg; + + Message({required this.chatId, required this.msg}); + + + Map toMap() { + return { + 'chat_id': chatId, + 'msg': msg, + }; + } + + + factory Message.fromMap(Map map) { + return Message( + chatId: map['chat_id'] ?? '', + msg: map['msg'] ?? '', + ); + } + + + String toJson() => json.encode(toMap()); + factory Message.fromJson(String source) => Message.fromMap(json.decode(source)); +} \ No newline at end of file