Create a Chat in Angular 4 with Socket.Io

0

I have created a chat in angular 4 with the help of socket.io, fine until the messages are sent to everyone, I need the connection to be user with user, not of all with all (for now). I read that I use a nickname but I really do not know what that is used for.

this is my index.js

let express = require('express')
let app = express();

let http = require('http');
let server = http.Server(app);

let socketIO = require('socket.io');
let io = socketIO(server);

const port = process.env.PORT || 3000;

io.on('connection', (socket) => {
    console.log('user connected');

    socket.on('new_message', (message) => {
            //socket.emit('new_message',message);
            io.emit('new_message',message);
            console.log( 'el mensaje emitido '+message);
        });

    // socket.on('join-user',(user)=>{

    //  console.log('se unio un usuario'+user);

    // });

    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

server.listen(port, () => {
    console.log('started on port: ${port}');
});

this service >

import * as io from 'socket.io-client';
import { Observable } from 'rxjs/Observable';

export class ChatService {
    private url = 'http://localhost:3000';
    private socket;

    constructor() {
        this.socket = io(this.url);
    }

    public sendMessage(message) {
        this.socket.emit('new_message', message);
    }

    public getMessages = () => { 
        return Observable.create((observer) => {
            console.log('estoy dentro del servicio, dentro del returnn');
            this.socket.on('new_message', (message) => {
                observer.next(message);
            });
        });
    }


    // public getMessages(message){
    //  return this.socket.on('new_message',message);

    // }

}

and my component:

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { RegisterUser,Roles,EditProfile,billetera,Curso} from '../../../model/models';
import { StrService } from '../../../Service/System.service';
import { Subject } from 'rxjs/Rx';
import { ChatService } from './chart.service';


@Component({
    selector: 'chatsView',
    templateUrl: 'chats.component.html',
    providers :[ChatService],
})

export class ChatsViewComponent implements OnInit {
    public data: any=[];
    message: string;
    messages: string[] = [];
    public username;
  constructor(private chatService: ChatService) {
  }

  sendMessage() {

    this.username = sessionStorage.getItem('user');
    this.chatService.sendMessage(this.message);
    this.message = '';

  }

  ngOnInit() { 
    this.chatService.getMessages().subscribe(message=>{
    console.log('dasd'+ message);
    this.messages.push(message);
    //console.log('ChatComponent Initialized '+this.messages+' y los mensajes');
    });
  }
}
    
asked by j.dow 14.09.2017 в 19:15
source

1 answer

1

you only get the id of the socket with which you want to carry out the conversation and I'm ready, I do it in this way since android should not be very different in your language

io.sockets.connected[id_socket].emit('nuevo mensaje',mensaje);
    
answered by 14.09.2017 / 19:21
source