All things working well but problem is that i want to show sender and receiver message on different side but i don't know how i can implement this i also getting socket ids from server side but i'm not able to create logic how i can differentiate sender and receiver message on my html page please anyone can help me Thanks in advance
this is my server side code
io.on('connection', (socket) => {
console.log('a user connected');
socket.emit('myId', socket.id);
socket.on('sendMessage', (message) => {
const sockitID = socket.id;
console.log(sockitID);
io.emit('recieveMessage', message); //`${socket.id.substr(0, 2)} said--${message}`
});
socket.on('disconnect', () => {
console.log('a user disconnected!');
});
});
this is my chatserivce file from agular side
import { Injectable, OnInit } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { io, Socket } from "socket.io-client";
import { DefaultEventsMap } from 'socket.io-client/build/typed-events';
import { MessageModel } from './app.component';
@Injectable({
providedIn: 'root'
})
export class ChatService implements OnInit {
public message$: BehaviorSubject<MessageModel> = new BehaviorSubject({});
public socket: Socket<DefaultEventsMap, DefaultEventsMap>;
public socketID: string = ''
constructor() {
this.socket =io('http://localhost:3000');
this.socket.on('myId', (id)=>{
console.log('from service',id);
});
}
ngOnInit(): void {
}
public sendMessage(message:any) {
this.socket.emit('sendMessage', {message: message, senderId : this.socketID});
const senderID = this.socket.id;
console.log('Sender ID = ' ,senderID);
}
public getNewMessage = () => {
this.socket.on('recieveMessage', (message) =>{
this.message$.next(message);
const reciverID = this.socket.id;
console.log('Receiver ID = ', reciverID)
});
return this.message$.asObservable();
};
}
This is my angular typescript file
import { Component } from '@angular/core';
import { ChatService } from './chat.service';
export interface MessageModel{
message?: string;
senderId?:string;
}
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
public socketId: string = '';
constructor(private chatService: ChatService){}
newMessage!: string;
messageList: MessageModel[] = [];
ngOnInit(){
this.socketId = this.chatService.socketID;
console.log('this.socketID', this.socketId)
this.chatService.getNewMessage().subscribe((message: MessageModel) => {
const socketId = message.senderId;
console.log('Sockit ID = ',socketId);
this.messageList.push(message);
});
}
sendMessage() {
this.chatService.sendMessage(this.newMessage);
this.newMessage = '';
}
}
this is my html file for displaying messages
<div class="chats" *ngFor="let message of messageList">
<div *ngIf="message">
<div *ngIf="socketId === message.senderId" class="client-chat">
{{message.message}}
</div>
<div *ngIf="socketId !== message.senderId" class="my-chat">
{{message.message}}
</div>
</div>
</div>
This is my css style to seprate sender message to receiver through styling
.client-chat{
width: 60%;
word-wrap: break-word;
background-color: #4f5d73c7;
padding: 7px 10px;
border-radius: 10px 10px 10px 0px;
margin: 10px 0px;
}
.my-chat{
width: 60%;
word-wrap: break-word;
background-color: #77b3d4c7;
padding: 7px 10px;
border-radius: 10px 10px 0px 10px;
margin: 5px 0px 5px auto;
}
i am not able to create logic for sepeerating message sender and receiver please anyone can solve my problem Thanks in advance


You have never updated
socketIDinChatServiceEdit:
When you update
socketIDinChatService, thesocketIdinAppComponentis not updated, because you only setsocketIdonce inngOnInit.The simplest thing you can do is to completely get rid of the
socketIdfield, makechatServicepublic and accesschatService.socketIDdirectly in your HTML template.