import { Image, StyleSheet, Button, TextInput } from 'react-native'; import React, { useState, useEffect } from 'react'; import { HelloWave } from '@/components/HelloWave'; import ParallaxScrollView from '@/components/ParallaxScrollView'; import { ThemedText } from '@/components/ThemedText'; import { ThemedView } from '@/components/ThemedView'; import * as Location from 'expo-location'; import io, { Socket } from 'socket.io-client'; export default function HomeScreen() { const [btnColor, setBtnColor] = useState("#008000"); const [broadcastState, setBroadcastState] = useState(false); const [token, setToken] = useState(""); // State для ввода токена const [socket, setSocket] = useState(null); useEffect(() => { // Очистка подключения при размонтировании компонента return () => { if (socket) { socket.disconnect(); } }; }, [socket]); const onPressSwitchBroadcast = () => { setBtnColor(btnColor === "#008000" ? "#FF0000" : "#008000"); setBroadcastState(!broadcastState); if (socket) { socket.disconnect(); setSocket(null); } else { if (token) { const newSocket = io(`ws://192.168.0.76:9992/ws/${token}/sendGeo`); newSocket.on('connect', () => { console.log('Connected to WebSocket Server'); }); newSocket.on('disconnect', () => { console.log('Disconnected from WebSocket Server'); }); newSocket.on('location_ack', (data) => { console.log('Location acknowledged by server:', data); }); setSocket(newSocket); } else { console.error('Token is required to start the broadcast'); } } }; const getLocation = async () => { let { status } = await Location.requestForegroundPermissionsAsync(); if (status !== 'granted') { console.error('Permission to access location was denied'); return; } let location = await Location.getCurrentPositionAsync({}); console.log('Location:', location); sendLocation(location.coords.latitude, location.coords.longitude); }; const sendLocation = (latitude: number, longitude: number) => { if (socket) { const locationData = { latitude, longitude, token, // Include token in the message }; socket.emit('location', locationData); console.log('Location sent:', locationData); } }; useEffect(() => { if (broadcastState) { getLocation(); } }, [broadcastState]); return ( }> Welcome! Шаг 1: Введите токен Токен: Step 2: Начать трансляцию геолокации Нажмите ниже для трансляции геолокации.