I have implemented chat in Ionic3 using pubnub. Its working fine for a group chat.the channel used for group chat is "group1-ch". I have added my code here. I am facing some difficulties in developing a one to one chat.
PubnubService
import {Injectable, EventEmitter} from '@angular/core';
declare var PUBNUB;
type OnMessageFn = (message, envelope, channelOrGroup, time, channel) => void;
export enum PubNubEventType {
MESSAGE,
CONNECT,
DISCONNECT,
RECONNECT,
PUBLISHED,
HISTORY,
PRESENCE
}
export class PubNubEvent {
constructor(public type: PubNubEventType, channel:string, public value: any) {}
}
@Injectable()
export class PubNubService {
pubnub:any;
/**
* Call this method after platform becomes to be ready
*/
// init() {
constructor() {
}
connectionuuid(uuid){
this.pubnub = PUBNUB({
subscribe_key: '*********************************',
publish_key: '*********************************',
uuid:uuid,
ssl: true,
secret_key: '**************************************'
});
}
subscribe(channel:string):EventEmitter<PubNubEvent> {
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.subscribe({
channel : channel,
withPresence: true,
presence : (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.PRESENCE, channel, message));
},
message : (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.MESSAGE, channel, message));
},
connect: (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.CONNECT, channel, message));
},
disconnect: (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.DISCONNECT, channel, message));
},
reconnect: (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.RECONNECT, channel, message));
},
error: (error) => {
eventEmitter.error(error);
},
});
return eventEmitter;
}
publish(channel:string, message:any, store_in_history:boolean = true):EventEmitter<PubNubEvent> {
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.publish({
channel: channel,
message: message,
store_in_history: store_in_history,
callback : (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.PUBLISHED, channel, message));
},
// Executes on a publish error.
error: (error) => {
eventEmitter.error(error);
}
});
return eventEmitter;
}
individual_chat(channel:string, message:any, store_in_history:boolean = true):EventEmitter<PubNubEvent> {
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.publish({
channel: channel,
message: message,
store_in_history: store_in_history,
callback : (message) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.PUBLISHED, channel, message));
},
// Executes on a publish error.
error: (error) => {
eventEmitter.error(error);
}
});
return eventEmitter;
}
history(channel: string, count:number = 100, start:number = null, end:number = null, reverse:boolean = true, include_token: boolean = true):EventEmitter<PubNubEvent> {
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.history({
channel: channel,
callback: (messages) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.HISTORY, channel, messages));
},
error: (error) => {
eventEmitter.error(error);
},
count: count,
start: start,
end: end,
reverse: reverse,
include_token: include_token
});
return eventEmitter;
}
here_now(channel: string, count:number = 100, start:number = null, end:number = null, reverse:boolean = true, include_token: boolean = true):EventEmitter<PubNubEvent>{
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.here_now({
channel: channel,
callback: (m) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.PRESENCE, channel, m));
},
error: (error) => {
eventEmitter.error(error);
},
count: count,
start: start,
end: end,
reverse: reverse,
include_token: include_token
});
return eventEmitter;
}
where_now(channel: string, count:number = 100, start:number = null, end:number = null, reverse:boolean = true, include_token: boolean = true):EventEmitter<PubNubEvent>{
let eventEmitter:EventEmitter<PubNubEvent> = new EventEmitter<PubNubEvent>();
this.pubnub.where_now({
uuid: channel,
callback: (m) => {
eventEmitter.emit(new PubNubEvent(PubNubEventType.PRESENCE, channel, m));
},
error: (error) => {
eventEmitter.error(error);
},
count: count,
start: start,
end: end,
reverse: reverse,
include_token: include_token
});
return eventEmitter;
}
}
My Requirement
- Could anyone please tell me how to create "channel" for one to one chat?
- How the receiver knows which channel the sender is using?
Thanks and Regards
Anand Raj