AgoraIO / RTM

143 stars 160 forks source link

CHANNEL MESSAGE EVENT IS NOT GETTING ANY DATA/ CHAT SENT #122

Open RalphLincoln opened 3 years ago

RalphLincoln commented 3 years ago

My code below

import AgoraRTM from 'agora-rtm-sdk';
import EventEmitter from 'events';

export default class RTMClient extends EventEmitter {
    constructor () {
        super()
        this.channels = {}
        this._logined = false
    }

    init (appId) {
        this.client = AgoraRTM.createInstance(appId)
        this.subscribeClientEvents()
    }

    // subscribe client events
    subscribeClientEvents () {
        const clientEvents = [
        'ConnectionStateChanged',
        'MessageFromPeer'
        ]
        clientEvents.forEach((eventName) => {
            this.client.on(eventName, (...args) => {
                console.log('emit ', eventName, ...args)
                // log event message
                this.emit(eventName, ...args)
            })
        })
    }

    // subscribe channel events
    subscribeChannelEvents (channelName) {
        const channelEvents = [
        'ChannelMessage',
        'MemberJoined',
        'MemberLeft'
        ]
        channelEvents.forEach((eventName) => {
            console.log(this.channels)
            this.channels[channelName].channel.on(eventName, (...args) => {
                console.log('emit ', eventName, args)
                this.emit(eventName, { channelName, args: args })
            })
        })
    }

    async login (accountName, token) {
        this.accountName = accountName
        return this.client.login({ uid: this.accountName, token })
    }

    async logout () {
        return this.client.logout()
    }

    async joinChannel (name) {
        console.log('joinChannel', name)
        const channel = this.client.createChannel(name)
        this.channels[name] = {
            channel,
            joined: false // channel state
        }
        this.subscribeChannelEvents(name)
        console.log(channel)
        return channel.join()
    }

    async leaveChannel (name) {
        console.log('leaveChannel', name)
        if (!this.channels[name] ||
            (this.channels[name] &&
            !this.channels[name].joined)) return
        return this.channels[name].channel.leave()
    }

    async sendChannelMessage (text, channelName) {
        console.log(text, channelName)
        if (!channelName || !channelName.joined) return console.log("none")
        console.log(this.channels[channelName])
        return channelName.sendMessage({ text })
    }

    async sendPeerMessage (text, peerId) {
        console.log('sendPeerMessage', text, peerId)
        return this.client.sendMessageToPeer({ text }, peerId.toString())
    }

    async queryPeersOnlineStatus (memberId) {
        console.log('queryPeersOnlineStatus', memberId)
        return this.client.queryPeersOnlineStatus([memberId])
    }

    //send image
    async uploadImage (blob, peerId) {
        const mediaMessage = await this.client.createMediaMessageByUploading(blob, {
        messageType: 'IMAGE',
        fileName: 'agora.jpg',
        description: 'send image',
        thumbnail: blob, 
        // width: 100,
        // height: 200,
        // thumbnailWidth: 50,
        // thumbnailHeight: 200, 
        }) 
        return this.client.sendMessageToPeer(mediaMessage, peerId)
    }

    async sendChannelMediaMessage (blob, channelName) {
        console.log('sendChannelMessage', blob, channelName)
        if (!this.channels[channelName] || !this.channels[channelName].joined) return
        const mediaMessage = await this.client.createMediaMessageByUploading(blob, {
            messageType: 'IMAGE',
            fileName: 'agora.jpg',
            description: 'send image',
            thumbnail: blob, 
            // width: 100,
            // height: 200,
            // thumbnailWidth: 50,
            // thumbnailHeight: 200, 
        }) 
        return this.channels[channelName].channel.sendMessage(mediaMessage)
    }

    async cancelImage (message) {
        const controller = new AbortController()
        setTimeout(() => controller.abort(), 1000)
        await this.client.downloadMedia(message.mediaId, {
            cancelSignal: controller.signal,
            onOperationProgress: ({currentSize, totalSize}) => {
                console.log(currentSize, totalSize)
            },
        })
    }

}
nhan7777 commented 3 years ago

I have same issue on iOS SDK 1.4.3.

plutoless commented 3 years ago

@RalphLincoln @nhan7777 could you pls provide logs?

nhan7777 commented 3 years ago

@RalphLincoln @nhan7777 could you pls provide logs?

No log here. Client logined successfully. I tried debug breakpoint at function (void)channel:(AgoraRtmChannel *)channel messageReceived:(AgoraRtmMessage *)message fromMember:(AgoraRtmMember *)member but nothing happened.

plutoless commented 3 years ago

@nhan7777 if you can provide your log it will be easier for me to understand your situation. if not maybe you can provide your source code or reproducible project?

nhan7777 commented 3 years ago

@plutoless you can try this example https://github.com/AgoraIO/Agora-Flutter-RTM-SDK. I tried debug native sdk. Maybe it is an issue of server side

RalphLincoln commented 3 years ago

@plutoless try my code above and see if it works!!

plutoless commented 3 years ago

@RalphLincoln hi your code is just a class definition. i have no idea how you instantiate the class and use.

nhan7777 commented 3 years ago

@plutoless Did you try the example? Does it work?