android安卓使用socketIO实现聊天室功能

android安卓使用socketIO实现聊天室功能,第1张

安卓使用socketIo实现聊天室Demo1:安卓androidSocketIo使用方式socketIo-Android文档类资源-CSDN下载安卓使用socketio,和服务器进行通信,实现聊天室功能,可以正常进入退出聊天室,可以发送消息更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/jifenglie/81102204

安卓使用socketio实现聊天室Demo2:

安卓androidSocketIo使用方式socketIo-Android文档类资源-CSDN下载安卓使用socketio,和服务器进行通信,实现聊天室功能,可以正常进入退出聊天室,可以发送消息更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/jifenglie/81102204 自己定义的聊天页面:

 引入:

   compile('io.socket:socket.io-client:1.0.0') {
       exclude group: 'org.json', module: 'json'
   }

初始化

try {
            mSocket = IO.socket(Config.WEBSOCKET_URL + userId);//注册
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }

注册监听方法,被动接收服务器消息,接收方法调用的回掉信息

mSocket.on(Socket.EVENT_CONNECT, onConnect);//注册监听方法
        mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
        mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
        mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
 
 
        mSocket.on(Constants.NEW_JOIN_ROOM, new Emitter.Listener() {//注册监听方法
            @Override
            public void call(final Object... args) {
                Log.e("NEW_JOIN_ROOM", "加入直播间");
                parseData(args);
            }
        });
        mSocket.on(Constants.NEW_GROUP, new Emitter.Listener() {//注册监听方法
            @Override
            public void call(final Object... args) {
                Log.e("NEW_GROUP", "新消息...");
                parseData(args);
            }
        });
 
        mSocket.on(Constants.BROADCAST, new Emitter.Listener() {
            @Override
            public void call(final Object... args) {
                Log.e("BROADCAST", "BROADCAST");
                parseData(args);
            }
        });
 
        mSocket.on(Constants.EXIT_ROOM, new Emitter.Listener() {
            @Override
            public void call(final Object... args) {
                Log.e("EXIT_ROOM", "退出直播间");
                parseData(args);
            }
        });
 
        mSocket.connect();//链接



private Emitter.Listener onConnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.e("onConnect", "连接成功...");
        }
    };
 
    private Emitter.Listener onDisconnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.e("error", args.toString());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.i(TAG, "diconnected");
                    Toast.makeText(getApplicationContext(), "退出直播间", Toast.LENGTH_LONG).show();
                }
            });
        }
    };
 
    private Emitter.Listener onConnectError = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.e("error", args.toString());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.e(TAG, "Error connecting");
                    Toast.makeText(getApplicationContext(),
                            R.string.error_connect, Toast.LENGTH_LONG).show();
                }
            });
        }
    };

主动发送消息 

        RequestBean bean = new RequestBean();
        bean.setGroupId(roomId + "");
        bean.setUserId(userId + "");
        mSocket.emit(Constants.NEW_JOIN_ROOM, new Gson().toJson(bean));

//Constants.NEW_JOIN_ROOM  是方法名 和服务器方法名一致

在activity中正常使用:

package com.leying.livestreaming.ui.activtiy;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.core.app.ActivityCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.leying.livestreaming.Config;
import com.leying.livestreaming.R;
import com.leying.livestreaming.bean.ChatMessage;
import com.leying.livestreaming.bean.RequestBean;
import com.leying.livestreaming.bean.ResultMsgBean;
import com.leying.livestreaming.bean.SendMsgBean;
import com.leying.livestreaming.common.base.BaseActivity;
import com.leying.livestreaming.common.base.ResultBean;
import com.leying.livestreaming.common.basebean.ItemBean;
import com.leying.livestreaming.common.utils.SPUtils;
import com.leying.livestreaming.common.utils.ToastUtils;
import com.leying.livestreaming.databinding.LiveplayActivityLivePlayBinding;
import com.leying.livestreaming.net.ApiService;
import com.leying.livestreaming.ui.adapter.ItemDemoAdapter;
import com.leying.livestreaming.ui.viewModel.LivePlayViewModel;
import com.leying.livestreaming.utils.Constants;
import com.tencent.live2.V2TXLiveDef;
import com.tencent.live2.V2TXLivePlayer;
import com.tencent.live2.V2TXLivePlayerObserver;
import com.tencent.live2.impl.V2TXLivePlayerImpl;
import com.tencent.rtmp.ui.TXCloudVideoView;

import java.lang.reflect.Type;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;

import static com.leying.livestreaming.common.basebean.ItemBean.DEFAULT_MSG;
import static com.leying.livestreaming.common.basebean.ItemBean.ME_SEND_MSG;
import static com.leying.livestreaming.common.basebean.ItemBean.PERSON_SEND_MSG;


/**
 * MLVB 直播拉流详情页
 * 

* 包含如下简单功能: *

* 详见接入文档{https://cloud.tencent.com/document/product/454/56598} *

*

* Playback View *

* Features: *

* For more information, please see the integration document {https://cloud.tencent.com/document/product/454/56598}. */ public class LivePlayActivity2 extends BaseActivity implements View.OnClickListener { private static final String TAG = "LivePlayActivity"; protected static final int REQ_PERMISSION_CODE = 0x1000; protected int mGrantedCount = 0; private Socket mSocket; private TXCloudVideoView mPlayRenderView; private V2TXLivePlayer mLivePlayer; private boolean mPlayFlag = false; private Button mButtonMute; private TextView mTextTitle; private ItemDemoAdapter itemDemoAdapter; private RecyclerView recyclerView; private List recivceMsgs = new ArrayList<>(); private LivePlayViewModel viewModel; // String playURL = "rtmp://live.lymatrix.com/live/5?txSecret=c83fa857eecaca45d0f6b851415c11cf&txTime=61E23988"; String playURL = ""; private boolean isHeadShow = true; private boolean isFullScreen = false; private String mStreamId; private int mStreamType = 0; //0: RTC; 1:RTMP; 2:WEBRTC private String roomId = ""; //0: RTC; 1:RTMP; 2:WEBRTC private String userId = ""; private boolean mPlayAudioFlag = true; @Override protected int getLayoutId() { return R.layout.liveplay_activity_live_play; } @Override protected void initView() { super.initView(); setStatusBarColor(R.color.common_bg_color); roomId = getIntent().getStringExtra(Constants.ROOM_ID); userId = SPUtils.getSharedStringData(SPUtils.USER_ID); Log.e("roomId---userId", roomId + "---" + userId); try { mSocket = IO.socket(Config.WEBSOCKET_URL + userId);//注册 } catch (URISyntaxException e) { throw new RuntimeException(e); } registMethod(); initPlayView(); } List chatInfoDatas = new ArrayList<>(); private void initPlayView() { dataBinding = DataBindingUtil.setContentView(this, getLayoutId()); int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { if (checkPermission()) { initIntentData(); initView2(); getPalyUrl(); } recyclerView = dataBinding.recyclerView; recyclerView.setLayoutManager(new LinearLayoutManager(this)); itemDemoAdapter = new ItemDemoAdapter(this, new ArrayList()); recyclerView.setAdapter(itemDemoAdapter); viewModel = new LivePlayViewModel(this, recivceMsgs); viewModel.initData(itemDemoAdapter); if (chatInfoDatas.size() > 0) { itemDemoAdapter.addDatas(chatInfoDatas); } // chatInfoDatas = itemDemoAdapter.getDatas(); dataBinding.buttonSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String msg = dataBinding.msgET.getText().toString().trim(); if ("".equals(msg)) { return; } SendMsgBean bean = new SendMsgBean(); bean.setMessage(msg); bean.setFromUid(userId + ""); bean.setGroupId(roomId + ""); mSocket.emit(Constants.NEW_GROUP, new Gson().toJson(bean));//发送新消息 dataBinding.msgET.setText(""); hintKeyBoard(); } }); dataBinding.playTxCloudView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isHeadShow) { hidenHeadView(); } else { showHeadView(); } } }); dataBinding.fullScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } }); dataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { chatInfoDatas = itemDemoAdapter.getDatas(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); if (checkPermission()) { initIntentData(); initView2(); getPalyUrl(); } dataBinding.playTxCloudView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isHeadShow) { hidenHeadView(); } else { showHeadView(); } } }); dataBinding.halfScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); } }); dataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); initPlayView(); } @Override public void onBackPressed() { if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); return; } super.onBackPressed(); } public void hintKeyBoard() { //拿到InputMethodManager InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); //如果window上view获取焦点 && view不为空 if (imm.isActive() && getCurrentFocus() != null) { //拿到view的token 不为空 if (getCurrentFocus().getWindowToken() != null) { //表示软键盘窗口总是隐藏,除非开始时以SHOW_FORCED显示。 imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } } private void registMethod() { mSocket.on(Socket.EVENT_CONNECT, onConnect);//注册监听方法 mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect); mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); mSocket.on(Constants.NEW_JOIN_ROOM, new Emitter.Listener() {//注册监听方法 @Override public void call(final Object... args) { Log.e("NEW_JOIN_ROOM", "加入直播间"); parseData(args); } }); mSocket.on(Constants.NEW_GROUP, new Emitter.Listener() {//注册监听方法 @Override public void call(final Object... args) { Log.e("NEW_GROUP", "新消息..."); parseData(args); } }); mSocket.on(Constants.BROADCAST, new Emitter.Listener() { @Override public void call(final Object... args) { Log.e("BROADCAST", "BROADCAST"); parseData(args); } }); mSocket.on(Constants.EXIT_ROOM, new Emitter.Listener() { @Override public void call(final Object... args) { Log.e("EXIT_ROOM", "退出直播间"); parseData(args); } }); mSocket.connect(); RequestBean bean = new RequestBean(); bean.setGroupId(roomId + ""); bean.setUserId(userId + ""); mSocket.emit(Constants.NEW_JOIN_ROOM, new Gson().toJson(bean)); } private void parseData(final Object... args) { ChatMessage el = null; try { if (args.length > 0) { String jsonel = new Gson().toJson(args[0]); Type typel = new TypeToken() { }.getType(); ResultMsgBean bean = new Gson().fromJson(jsonel, typel); el = bean.getNameValuePairs(); } } catch (Exception e) { Log.e("NEW_JOIN_ROOM", "返回值解析错误" + e.getMessage()); } if (el != null) { dealRecivceMsg(el); } } private void dealRecivceMsg(ChatMessage el) { runOnUiThread(new Runnable() { @Override public void run() { if (el.getTypes() == 6) {//上线 itemDemoAdapter.add(new ItemBean.Builder().key("进入直播间").value(el.getNickName() + "进入直播间").viewType(DEFAULT_MSG).build()); } else if (el.getTypes() == 7) {//下线 itemDemoAdapter.add(new ItemBean.Builder().key("退出直播间").value(el.getNickName() + "退出直播间").viewType(DEFAULT_MSG).build()); } else if (el.getTypes() == 0) {//新消息 if (el.getUserId().equals(userId)) {//本人发消息 itemDemoAdapter.add(new ItemBean.Builder().key("新消息").value4(el.getUrl()).value(el.getNickName()).value2("").value3(el.getChatContent()).value4(el.getUrl()).viewType(ME_SEND_MSG).isLabel(false).build()); } else {//其余人员发送消息 roles0学生,1老师,2班主任 String type0 = ""; boolean show = false; boolean isBanZhuRen=false; if (el.getRoles() == 0) { show = false; } else if (el.getRoles() == 1) { show = true; type0 = "主讲"; isBanZhuRen=false; } else if (el.getRoles() == 2) { show = true; type0 = "班主任"; isBanZhuRen=true; } itemDemoAdapter.add(new ItemBean.Builder().key("新消息").value4(el.getUrl()).value(el.getNickName()).value2(type0).value3(el.getChatContent()).value4(el.getUrl()).viewType(PERSON_SEND_MSG).isLabel(show).enable(isBanZhuRen).build()); } } else { } dataBinding.recyclerView.scrollToPosition(itemDemoAdapter.getDatas().size() - 1); } }); } private void initIntentData() { mStreamId = getIntent().getStringExtra("STREAM_ID"); mStreamType = getIntent().getIntExtra("STREAM_TYPE", 0); } protected void initView2() { mPlayRenderView = findViewById(R.id.play_tx_cloud_view); mButtonMute = findViewById(R.id.btn_mute); mTextTitle = findViewById(R.id.tv_title); mButtonMute.setOnClickListener(this); // findViewById(R.id.iv_back).setOnClickListener(this); if (!TextUtils.isEmpty(mStreamId)) { mTextTitle.setText(mStreamId); } } @SuppressLint("CheckResult") private void getPalyUrl() { ApiService.service .getPalyUrl(roomId, 1) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @Override public void accept(ResultBean result) throws Exception { if (result.isSuccess() || result.getCode() == 200) { playURL = result.getData(); startPlay(); } else { // viewDataBinding.loadingView.setType(LoadingView.WEIGHT_EMPTY); ToastUtils.showShort(LivePlayActivity2.this, result.getMsg()); } } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { // viewDataBinding.loadingView.setType(LoadingView.WEIGHT_EMPTY); ToastUtils.showShort(LivePlayActivity2.this, "网络访问失败", throwable); } }); } private void startPlay() { // String playURL = URLUtils.generatePlayUrl(mStreamId, userId, mStreamType); mLivePlayer = new V2TXLivePlayerImpl(LivePlayActivity2.this); mLivePlayer.setRenderFillMode(V2TXLiveDef.V2TXLiveFillMode.V2TXLiveFillModeFit); // mLivePlayer.setRenderRotation(V2TXLiveDef.V2TXLiveRotation.V2TXLiveRotation270); mLivePlayer.setRenderView(mPlayRenderView); mLivePlayer.setObserver(new V2TXLivePlayerObserver() { @Override public void onError(V2TXLivePlayer player, int code, String msg, Bundle extraInfo) { Log.d(TAG, "[Player] onError: player-" + player + " code-" + code + " msg-" + msg + " info-" + extraInfo); } // @Override // public void onVideoLoading(V2TXLivePlayer player, Bundle extraInfo) { // Log.i(TAG, "[Player] onVideoLoading: player-" + player + ", extraInfo-" + extraInfo); // } // @Override // public void onVideoPlaying(V2TXLivePlayer player, boolean firstPlay, Bundle extraInfo) { // Log.i(TAG, "[Player] onVideoPlaying: player-" // + player + " firstPlay-" + firstPlay + " info-" + extraInfo); // } // @Override // public void onVideoResolutionChanged(V2TXLivePlayer player, int width, int height) { // Log.i(TAG, "[Player] onVideoResolutionChanged: player-" // + player + " width-" + width + " height-" + height); // } @Override public void onWarning(V2TXLivePlayer v2TXLivePlayer, int i, String s, Bundle bundle) { Log.d(TAG, "[Player] Override: player-" + v2TXLivePlayer + ", i-" + i + ", s-" + s); } @Override public void onRenderVideoFrame(V2TXLivePlayer player, V2TXLiveDef.V2TXLiveVideoFrame v2TXLiveVideoFrame) { super.onRenderVideoFrame(player, v2TXLiveVideoFrame); Log.d(TAG, "[Player] onRenderVideoFrame: player-" + player + ", v2TXLiveVideoFrame-" + v2TXLiveVideoFrame); } }); int result = mLivePlayer.startPlay(playURL); if (result == 0) { mPlayFlag = true; } Log.d(TAG, "startPlay : " + result); } @Override protected void onDestroy() { super.onDestroy(); //注销监听方法 mSocket.emit(Constants.EXIT_ROOM, roomId); mSocket.disconnect(); mSocket.off(Socket.EVENT_CONNECT, onConnect); mSocket.off(Socket.EVENT_DISCONNECT, onDisconnect); mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); mSocket.off(Constants.NEW_JOIN_ROOM); mSocket.off(Constants.NEW_GROUP); mSocket.off(Constants.BROADCAST); mSocket.off(Constants.EXIT_ROOM); if (mLivePlayer != null) { if (mPlayFlag) { mLivePlayer.stopPlay(); } mLivePlayer = null; } } @Override public void onClick(View view) { int id = view.getId(); if (id == R.id.iv_back) { finish(); } else if (id == R.id.btn_mute) { mute(); } } private void mute() { if (mLivePlayer != null && mLivePlayer.isPlaying() == 1) { if (mPlayAudioFlag) { mLivePlayer.pauseAudio(); mPlayAudioFlag = false; mButtonMute.setText("取消静音"); } else { mLivePlayer.resumeAudio(); mPlayAudioFlag = true; mButtonMute.setText("静音"); } } } private Emitter.Listener onConnect = new Emitter.Listener() { @Override public void call(Object... args) { Log.e("onConnect", "连接成功..."); } }; private Emitter.Listener onDisconnect = new Emitter.Listener() { @Override public void call(Object... args) { Log.e("error", args.toString()); runOnUiThread(new Runnable() { @Override public void run() { Log.i(TAG, "diconnected"); Toast.makeText(getApplicationContext(), "退出直播间", Toast.LENGTH_LONG).show(); } }); } }; private Emitter.Listener onConnectError = new Emitter.Listener() { @Override public void call(Object... args) { Log.e("error", args.toString()); runOnUiThread(new Runnable() { @Override public void run() { Log.e(TAG, "Error connecting"); Toast.makeText(getApplicationContext(), R.string.error_connect, Toast.LENGTH_LONG).show(); } }); } }; protected boolean checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { List permissions = new ArrayList<>(); if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)) { permissions.add(Manifest.permission.CAMERA); } if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)) { permissions.add(Manifest.permission.RECORD_AUDIO); } if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)) { permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE); } if (permissions.size() != 0) { ActivityCompat.requestPermissions(LivePlayActivity2.this, permissions.toArray(new String[0]), REQ_PERMISSION_CODE); return false; } } return true; } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQ_PERMISSION_CODE: for (int ret : grantResults) { if (PackageManager.PERMISSION_GRANTED == ret) { mGrantedCount++; } } if (mGrantedCount == permissions.length) { initView2(); startPlay(); } else { Toast.makeText(this, "用户没有允许需要的权限,启动失败", Toast.LENGTH_SHORT).show(); } mGrantedCount = 0; break; default: break; } } public void setStatusBarColor(int colorId) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(getResources().getColor(colorId)); } } private void hidenHeadView() { dataBinding.head.setVisibility(View.GONE); dataBinding.bottom.setVisibility(View.GONE); isHeadShow = false; } private void showHeadView() { dataBinding.head.setVisibility(View.VISIBLE); dataBinding.bottom.setVisibility(View.VISIBLE); isHeadShow = true; } }

Constants.java  :

package com.leying.livestreaming.utils;

public class Constants {

    public static final String ROOM_ID = "room_id";
    public static final String GROUP_ID = "group_id";


    /**
     * chatInfo  消息内容
     *
     * currentCount  这个是在线人数
     *
     * onMessage  发送消息的接口
     * disConnection  下线接口
     * connect  打开连接 上线
     *
     * 发送消息json里面 messageType  消息类型
     */

    public static final String CHATINFO = "chatInfo";
    public static final String CURRENTCOUNT = "currentCount";
    public static final String JOIN_ROOM = "join";
    public static final String ONMESSAGE = "onMessage";
    public static final String DISCONNECTION = "disConnection";
    public static final String CONNECT = "connect";
    public static final String EVENT_GET_DATA = "getdata";


    public static final String NEW_JOIN_ROOM = "newjoin";//加入直播间
    public static final String NEW_GROUP = "newgroup";//发送群消息
    public static final String BROADCAST = "broadcast";//广播消息
    public static final String EXIT_ROOM = "out";//退出直播间



//    public static final String ROOM_ID = "room_id";
    public static final String USER_ID = "user_id";

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/992536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存