Skip to content

Commit

Permalink
socket io integrated
Browse files Browse the repository at this point in the history
  • Loading branch information
hrutik7 committed Jul 30, 2023
1 parent 8b02a34 commit efb5966
Show file tree
Hide file tree
Showing 8 changed files with 1,273 additions and 122 deletions.
11 changes: 7 additions & 4 deletions App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,16 @@ import * as queries from './src/graphql/queries';
import { Amplify, Auth } from 'aws-amplify';
// import awsconfig from './aws-exports';
import awsconfig from './src/aws-exports'
import Message from './app/Screens/Messege/Message';

import ChatScreen from './app/Screens/Messege/Message';
import SocketIOClient from 'socket.io-client';
Amplify.configure(awsconfig);


const todo = { name: "My first todo", description: "Hello world!" };
const Stack = createNativeStackNavigator();



function App(): JSX.Element {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
Expand Down Expand Up @@ -106,8 +109,8 @@ function App(): JSX.Element {
/>
<Stack.Screen
options={{headerShown: false}}
name="Message"
component={Message}
name="ChatScreen"
component={ChatScreen}
/>
</Stack.Navigator>
</NavigationContainer>
Expand Down
32 changes: 16 additions & 16 deletions app/Components/Tags/Tags.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,21 @@ const Tags = ({navigation}) => {
const [gender,setGender] = useState('')


// const deleteEntry = async () =>{
// try {
// const todoDetails = {
// id: '7a4f3b79-fcc0-4dcb-9f48-e01260b8ff82',
// };
const deleteEntry = async () =>{
try {
const todoDetails = {
id: 'b432b294-bc14-43f1-a3ab-68316a125602',
};

// const deletedTodo = await API.graphql({
// query: deleteUsersData,
// variables: { input: todoDetails }
// });
// console.log(deletedTodo)
// } catch (error) {
// console.log(error)
// }
// }
const deletedTodo = await API.graphql({
query: deleteUsersData,
variables: { input: todoDetails }
});
console.log(deletedTodo,"deleted data")
} catch (error) {
console.log(error,"err")
}
}


const postUserData = async () => {
Expand Down Expand Up @@ -150,8 +150,8 @@ function changeScreen(screenName) {
/>:<CustomTouchableOpacity
title="Submit"
onPress={() => {
// handlePress();
deleteEntry()
handlePress();
// deleteEntry()
}}
style={{
marginTop: 30,
Expand Down
115 changes: 43 additions & 72 deletions app/Screens/Messege/Message.js
Original file line number Diff line number Diff line change
@@ -1,88 +1,59 @@
import React, { useEffect, useState } from 'react';
import { View, Text, FlatList, TextInput, TouchableOpacity } from 'react-native';
import { API, graphqlOperation, Auth } from 'aws-amplify';
// import { listMessages } from './src/graphql/queries';
// import { onCreateMessage } from './src/graphql/subscriptions';
// import { createMessage } from './src/graphql/mutations';
import { listMessages } from '../../../src/graphql/queries';
import { onCreateMessage } from '../../../src/graphql/subscriptions';
import { createMessage } from '../../../src/graphql/mutations';
import React,{useState,useEffect} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStackNavigator } from '@react-navigation/native';
import SocketIOClient from 'socket.io-client';
import { TextInput,Button } from 'react-native';
const socket = SocketIOClient('http://localhost:3000');

socket.on('connect', () => {
console.log('Connected to server');
});

socket.on('disconnect', () => {
console.log('Disconnected from server');
});

socket.on('chat message', (msg) => {
console.log('New message:', msg);
});

const sendMessage = (msg) => {
socket.emit('chat message', msg);
};

const Message = () => {
const ChatScreen = () => {
const [messages, setMessages] = useState([]);
const [newMessage, setNewMessage] = useState('');
const [message, setMessage] = useState('');

useEffect(() => {
fetchMessages(); // Fetch existing messages
subscribeToNewMessages(); // Subscribe to real-time message updates
}, []);

const fetchMessages = async () => {
try {
const messageData = await API.graphql(graphqlOperation(listMessages));
setMessages(messageData.data.listMessages.items);
} catch (error) {
console.error('Error fetching messages:', error);
}
};

const subscribeToNewMessages = async () => {
const subscription = API.graphql(graphqlOperation(onCreateMessage)).subscribe({
next: (eventData) => {
const newMessage = eventData.value.data.onCreateMessage;
setMessages((prevMessages) => [...prevMessages, newMessage]);
},
error: (error) => {
console.error('Error subscribing to new messages:', error);
},
socket.on('chat message', (msg) => {
setMessages([...messages, msg]);
});
}, [messages]);

return () => subscription.unsubscribe(); // Cleanup the subscription when component unmounts
};

const handleSendMessage = async () => {
if (!newMessage) return;

const message = {
content: newMessage,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};

try {
await API.graphql(graphqlOperation(createMessage, { input: message }));
setNewMessage('');
} catch (error) {
console.error('Error sending message:', error);
}
const handleSendMessage = () => {
sendMessage(message);
setMessage('');
};

const renderMessageItem = ({ item }) => (
<View>
<Text>{item.content}</Text>
</View>
);

return (
<View>
<FlatList
data={messages}
renderItem={renderMessageItem}
keyExtractor={(item) => item.id}
/>
<Text>Chat Screen</Text>
<View>
<TextInput
style={{ borderWidth: 1, borderColor: 'gray', padding: 10 }}
placeholder="Type your message"
value={newMessage}
onChangeText={(text) => setNewMessage(text)}
/>
<TouchableOpacity onPress={handleSendMessage} style={{ backgroundColor: 'blue', padding: 10 }}>
<Text style={{ color: 'white' }}>Send</Text>
</TouchableOpacity>
{messages.map((msg, index) => (
<Text key={index}>{msg}</Text>
))}
</View>
<TextInput
value={message}
onChangeText={setMessage}
/>
<Button
title="Send"
onPress={handleSendMessage}
/>
</View>
);
};

export default Message;
export default ChatScreen;
11 changes: 4 additions & 7 deletions app/Screens/WaitingMatch/WaitingMatch.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,25 +43,22 @@ const WaitingScreen = ({navigation}) => {

let nextjwt = nextToken.accessToken.jwtToken
console.log(nextjwt,"==========================================")
const { data , errors} = await API.graphql({
const { data } = await API.graphql({
query: listUsersData,
variables: {
filter : null,
limit: 10, // Set the desired limit for each query
token: nextjwt, // Use the nextToken to paginate
},
});
if (errors) {
console.error('GraphQL errors:', errors);
return;
}

const newUsers = data.listUserInfos.items;
const newNextToken = data.listUserInfos.nextToken;
console.log(data.listUserInfos.items,"here is data")
setUsers((prevUsers) => [...prevUsers, ...newUsers]);
setNextToken(nextjwt);
} catch (error) {
console.error('Error fetching user information:', error.data.listUsersData.items);
console.error('Error fetching user information:', error);
}


Expand Down Expand Up @@ -99,7 +96,7 @@ console.log(data.listUserInfos.items,"here is data")
}}
title="update tags"
onPress={() =>{
navigation.navigate("Message")
navigation.navigate("ChatScreen")
// navigation.navigate("TagsScreen")
}}
/>
Expand Down
20 changes: 20 additions & 0 deletions chat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);

app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
console.log('a user connected');
socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.emit('chat message', msg);
});
});

server.listen(3000, function(){
console.log('listening on *:3000');
});
Loading

0 comments on commit efb5966

Please sign in to comment.