Socket
I use socket io in backend, so you must use socket io in your front not
web socket !
note you can use v chat test server base url is
http://170.178.195.150:81/api/v1/
connect url is
{{baseUrl}}without/api/v1/so it will behttp://170.178.195.150:81
Socket main name space
- connect data
{
'transports': ['websocket'],
'pingTimeout': 5000,
'connectTimeout': 5000,
'pingInterval': 5000,
'extraHeaders': <String, String>{
'Authorization': accessToken,
"accept-language": currentLocal
},
'forceNew': true
}
accessTokenNo Bearer token just send the token you can get one from login or register
socket can't connect if no
accessTokenprovided or not valid access token send
socket io events from clint
join emit with acknowledgment
- once you success connect you should emitWithAck to join, and you will receive rooms data from callback
- response will be like this
- res is in map format you don't need to decode it
{
"success": true,
"data": [
{
"_id": "61cd92223bd8731be040e11e",
"blockerId": null,
"groupSetting": null,
"updatedAt": 1640862250276,
"creatorId": "61cd8fb33bd8731be040e103",
"roomType": "single",
"lastMessage": {
"_id": "61cd922a3bd8731be040e138",
"messageType": "text",
"messageAttachment": null,
"createdAt": 1640862250273,
"content": "first",
"senderId": "61cd8fb33bd8731be040e103",
"senderName": "user1 updated name",
"senderImageThumb": "REGISTER_3c651b24-3912-4191-a131-af99292a75f9_THUMB.jpg",
"roomId": "61cd92223bd8731be040e11e"
},
"isOnline": 0,
"title": "user2",
"peerId": "61cd8ff33bd8731be040e108",
"peerEmail": "user2",
"thumbImage": "default_user_image.png",
"ifPeerReadMyLastMessage": 0,
"unReadCount": 0,
"roomMembersCount": 2,
"isMute": 0
}
]
}
socket io on events
on update_one_room
- this will fire if any room data changed like last message changed or user block me
- res is in map format you don't need to decode it
- response will like this
{
"_id": "61cd92223bd8731be040e11e",
"blockerId": null,
"groupSetting": null,
"updatedAt": 1640862250276,
"creatorId": "61cd8fb33bd8731be040e103",
"roomType": "single",
"lastMessage": {
"_id": "61cd922a3bd8731be040e138",
"messageType": "text",
"messageAttachment": null,
"createdAt": 1640862250273,
"content": "first",
"senderId": "61cd8fb33bd8731be040e103",
"senderName": "user1 updated name",
"senderImageThumb": "REGISTER_3c651b24-3912-4191-a131-af99292a75f9_THUMB.jpg",
"roomId": "61cd92223bd8731be040e11e"
},
"isOnline": 0,
"title": "user2",
"peerId": "61cd8ff33bd8731be040e108",
"peerEmail": "user2",
"thumbImage": "default_user_image.png",
"ifPeerReadMyLastMessage": 0,
"unReadCount": 0,
"roomMembersCount": 2,
"isMute": 0
}
on user_online_changed
- this event fire if user become offline or online only in my chats list
- res is in json format you need to decode it first
{
"status": 1,
"roomId": "xxx"
}
- 1 for become online
- 0 for offline
on user_typing_changed
- res is in map format you don't need to decode it
{
"status": "",
"name": "",
"roomId": ""
}
statusenum with this data ["stop","typing","recording"]namename of user case this group chatroomIdroom id which has the changes
Socket message name space
you need to connect this if user in message page and manually disconnect if he leaves
connect url is
{{baseUrl}}without/api/v1/so it will behttp://170.178.195.150:81/message
you need to connect this socket when user enter the message page
- connect data
{
'transports': ['websocket'],
'pingTimeout': 5000,
'connectTimeout': 5000,
'pingInterval': 5000,
'extraHeaders': <String, String>{
'Authorization': accessToken
},
'forceNew': true
}
accessTokenNo Bearer token just send the token you can get one from login or register socket can't connect if noaccessTokenprovided or not valid access token send
emit join
- pass
roomIdto its param _socket.emit("join", currentRoomId);
on all_messages event
- res is in json format you need to decode it
- res will like this
[
{
"_id": "61cd922a3bd8731be040e138",
"messageType": "text",
"messageAttachment": null,
"createdAt": 1640862250273,
"content": "first",
"senderId": "61cd8fb33bd8731be040e103",
"senderName": "user1 updated name",
"senderImageThumb": "REGISTER_3c651b24-3912-4191-a131-af99292a75f9_THUMB.jpg",
"roomId": "61cd92223bd8731be040e11e"
},
{
"_id": "61cd92223bd8731be040e128",
"messageType": "text",
"messageAttachment": null,
"createdAt": 1640862242839,
"content": "first",
"senderId": "61cd8fb33bd8731be040e103",
"senderName": "user1 updated name",
"senderImageThumb": "REGISTER_3c651b24-3912-4191-a131-af99292a75f9_THUMB.jpg",
"roomId": "61cd92223bd8731be040e11e"
}
]
on new_message event
- res is in json format you need to decode it
- this event will invoke on evey message you send or receive will invoke for sender and receiver so update your ui one you receive
- res will like this
{
"_id": "61cd922a3bd8731be040e138",
"messageType": "text",
"messageAttachment": null,
"createdAt": 1640862250273,
"content": "first",
"senderId": "61cd8fb33bd8731be040e103",
"senderName": "user1 updated name",
"senderImageThumb": "REGISTER_3c651b24-3912-4191-a131-af99292a75f9_THUMB.jpg",
"roomId": "61cd92223bd8731be040e11e"
}
don't forget to disconnect from this name space after user leave the message page so i can make received message as un read and send notifications