Commit 9aa23093 authored by sheteng's avatar sheteng

语音房间 禁言

parent 4aae5817
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\she\.android\avd\Copy_of_Copy_of_Pixel_3_XL_API_26.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-06-30T07:35:17.411815700Z" />
</component>
</project>
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <map>
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_connect.xml" value="0.3328125" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_connect_channel.xml" value="0.3328125" /> <entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_connect_channel.xml" value="0.3328125" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_login.xml" value="0.1612008072653885" /> <entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_login.xml" value="0.1612008072653885" />
<entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_main2.xml" value="0.1612008072653885" /> <entry key="..\:/ccwangluo/ccim_sdk_android/app/src/main/res/layout/activity_main2.xml" value="0.1612008072653885" />
......
...@@ -24,20 +24,20 @@ ...@@ -24,20 +24,20 @@
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".MainActivity2" android:name=".MainActivity2"
android:exported="false" android:exported="true"
android:label="@string/title_activity_main2" android:label="@string/title_activity_main2"
android:screenOrientation="portrait" /> android:screenOrientation="fullSensor" >
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/Theme.CcwangluoIm.NoActionBar">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/app_name"
android:screenOrientation="fullSensor" android:theme="@style/Theme.CcwangluoIm.NoActionBar">
</activity>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -2,7 +2,9 @@ package com.ccwangluo.im; ...@@ -2,7 +2,9 @@ package com.ccwangluo.im;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast; import android.widget.Toast;
...@@ -22,6 +24,8 @@ import com.ccwangluo.ccim.modle.NetStatus; ...@@ -22,6 +24,8 @@ import com.ccwangluo.ccim.modle.NetStatus;
import com.ccwangluo.ccim.modle.User; import com.ccwangluo.ccim.modle.User;
import com.ccwangluo.im.data.LoginViewModel; import com.ccwangluo.im.data.LoginViewModel;
import com.ccwangluo.im.databinding.ActivityMain2Binding; import com.ccwangluo.im.databinding.ActivityMain2Binding;
import com.ccwangluo.im.ui.login.LoginActivity;
import com.ccwangluo.im.util.ToastUtil;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
...@@ -127,7 +131,13 @@ public class MainActivity2 extends AppCompatActivity { ...@@ -127,7 +131,13 @@ public class MainActivity2 extends AppCompatActivity {
alertDialog.show(); alertDialog.show();
} }
@Override
public void pushUserMutedRes(Long mutedExpiredAt) {
ToastUtil.show(getApplicationContext(), "被禁言到" + mutedExpiredAt);
}
}); });
startActivity(new Intent(this,LoginActivity.class));
} }
@Override @Override
......
...@@ -78,37 +78,19 @@ public class ConnectActivity extends AppCompatActivity { ...@@ -78,37 +78,19 @@ public class ConnectActivity extends AppCompatActivity {
} }
}); });
binding.sendVoice.setOnTouchListener(new View.OnTouchListener() { binding.startVoice.setOnClickListener(new View.OnClickListener() {
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public void onClick(View v) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isSuccess)
CCIMClient.getInstance().stopAndSendAudioMessage(contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<MessageContent>() {
@Override
public void onSuccess(MessageContent message) {
binding.sendEdit.setText("");
loginViewModel.addPrivateMsg(message);
ToastUtil.show(getApplication(), "send Success");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(getApplication(), "send onFailed :" + errorCode);
}
});
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
CCIMClient.getInstance().startRecordAudioMessage(ConnectActivity.this, contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<Void>() { CCIMClient.getInstance().startRecordAudioMessage(ConnectActivity.this, contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<Void>() {
@Override @Override
public void onSuccess(Void unused) { public void onSuccess(Void unused) {
isSuccess = true; isSuccess = true;
} }
@Override @Override
public void onFailed(int errorCode) { public void onFailed(int errorCode) {
isSuccess = false; isSuccess = false;
ToastUtil.show(getApplication(), errorCode + ""); ToastUtil.show(ConnectActivity.this, errorCode + "");
} }
}, new RecordAutoSendCallback() { }, new RecordAutoSendCallback() {
@Override @Override
...@@ -124,10 +106,28 @@ public class ConnectActivity extends AppCompatActivity { ...@@ -124,10 +106,28 @@ public class ConnectActivity extends AppCompatActivity {
} }
}); });
} }
});
return false; binding.sendVoice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isSuccess)
CCIMClient.getInstance().stopAndSendAudioMessage(contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<MessageContent>() {
@Override
public void onSuccess(MessageContent message) {
binding.sendEdit.setText("");
loginViewModel.addPrivateMsg(message);
ToastUtil.show(getApplication(), "send Success");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(getApplication(), "send onFailed :" + errorCode);
}
});
} }
}); });
CCIMClient.getInstance().getPrivateMessage(contact.getContactUserId(), new ResultEventCallback<List<MessageContent>>() { CCIMClient.getInstance().getPrivateMessage(contact.getContactUserId(), new ResultEventCallback<List<MessageContent>>() {
@Override @Override
public void onSuccess(List<MessageContent> messageContents) { public void onSuccess(List<MessageContent> messageContents) {
......
...@@ -40,9 +40,10 @@ public class LoginActivity extends AppCompatActivity { ...@@ -40,9 +40,10 @@ public class LoginActivity extends AppCompatActivity {
@Override @Override
public void onChanged(Boolean aBoolean) { public void onChanged(Boolean aBoolean) {
if (aBoolean) { if (aBoolean) {
Intent intent = new Intent(LoginActivity.this, MainActivity2.class); // Intent intent = new Intent(LoginActivity.this, MainActivity2.class);
startActivity(intent); // startActivity(intent);
finish(); finish();
} }
} }
}); });
......
...@@ -44,7 +44,7 @@ public class ConnectChannelActivity extends AppCompatActivity { ...@@ -44,7 +44,7 @@ public class ConnectChannelActivity extends AppCompatActivity {
binding.msgList.setAdapter(channelMsgAdapter); binding.msgList.setAdapter(channelMsgAdapter);
long channelId = getIntent().getLongExtra("channelId",0); long channelId = getIntent().getLongExtra("channelId", 0);
loginViewModel.channelMsgList.observe(this, new Observer<MessageContent>() { loginViewModel.channelMsgList.observe(this, new Observer<MessageContent>() {
@Override @Override
...@@ -91,26 +91,9 @@ public class ConnectChannelActivity extends AppCompatActivity { ...@@ -91,26 +91,9 @@ public class ConnectChannelActivity extends AppCompatActivity {
} }
}); });
binding.sendVoice.setOnTouchListener(new View.OnTouchListener() { binding.startVoice.setOnClickListener(new View.OnClickListener() {
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public void onClick(View v) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isSuccess)
CCIMClient.getInstance().stopAndSendChannelAudioMessage(channelId, new ResultEventCallback<MessageContent>() {
@Override
public void onSuccess(MessageContent message) {
binding.sendEdit.setText("");
loginViewModel.addChannelMsg(message);
ToastUtil.show(ConnectChannelActivity.this, "send Success");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(ConnectChannelActivity.this, "send onFailed :" + errorCode);
}
});
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
CCIMClient.getInstance().startRecordChannelAudioMessage(ConnectChannelActivity.this, channelId, CCIMClient.getInstance().startRecordChannelAudioMessage(ConnectChannelActivity.this, channelId,
new ResultEventCallback<Void>() { new ResultEventCallback<Void>() {
@Override @Override
...@@ -135,15 +118,32 @@ public class ConnectChannelActivity extends AppCompatActivity { ...@@ -135,15 +118,32 @@ public class ConnectChannelActivity extends AppCompatActivity {
} }
}); });
} }
});
binding.sendVoice.setOnClickListener(new View.OnClickListener() {
return false; @Override
public void onClick(View v) {
if (isSuccess)
CCIMClient.getInstance().stopAndSendChannelAudioMessage(channelId, new ResultEventCallback<MessageContent>() {
@Override
public void onSuccess(MessageContent message) {
binding.sendEdit.setText("");
loginViewModel.addChannelMsg(message);
ToastUtil.show(ConnectChannelActivity.this, "send Success");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(ConnectChannelActivity.this, "send onFailed :" + errorCode);
}
});
} }
}); });
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
} }
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
public void onGetMessage(MessageContent message) { public void onGetMessage(MessageContent message) {
loginViewModel.addChannelMsg(message); loginViewModel.addChannelMsg(message);
......
...@@ -86,6 +86,7 @@ public class NotificationsFragment extends Fragment { ...@@ -86,6 +86,7 @@ public class NotificationsFragment extends Fragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final EditText inputServer = new EditText(getContext()); final EditText inputServer = new EditText(getContext());
inputServer.requestFocus();
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("channel id").setIcon(android.R.drawable.ic_dialog_info).setView(inputServer) builder.setTitle("channel id").setIcon(android.R.drawable.ic_dialog_info).setView(inputServer)
.setNegativeButton("Cancel", null); .setNegativeButton("Cancel", null);
...@@ -178,6 +179,7 @@ public class NotificationsFragment extends Fragment { ...@@ -178,6 +179,7 @@ public class NotificationsFragment extends Fragment {
final EditText roomeId = new EditText(getContext()); final EditText roomeId = new EditText(getContext());
roomeId.setHint("room id"); roomeId.setHint("room id");
roomeId.setInputType(InputType.TYPE_CLASS_NUMBER); roomeId.setInputType(InputType.TYPE_CLASS_NUMBER);
roomeId.requestFocus();
LinearLayout linearLayout = new LinearLayout(getContext()); LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(LinearLayout.VERTICAL); linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.addView(roomeId); linearLayout.addView(roomeId);
......
...@@ -41,12 +41,16 @@ ...@@ -41,12 +41,16 @@
android:gravity="center" android:gravity="center"
android:layout_marginBottom="100dp" android:layout_marginBottom="100dp"
android:orientation="horizontal"> android:orientation="horizontal">
<Button
android:id="@+id/start_voice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录音" />
<Button <Button
android:id="@+id/send_voice" android:id="@+id/send_voice"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="语音" /> android:text="发送语音" />
</LinearLayout> </LinearLayout>
......
...@@ -43,12 +43,16 @@ ...@@ -43,12 +43,16 @@
android:gravity="center" android:gravity="center"
android:layout_marginBottom="100dp" android:layout_marginBottom="100dp"
android:orientation="horizontal"> android:orientation="horizontal">
<Button
android:id="@+id/start_voice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录音" />
<Button <Button
android:id="@+id/send_voice" android:id="@+id/send_voice"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="语音" /> android:text="发送语音" />
</LinearLayout> </LinearLayout>
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:hint="ip" android:hint="ip"
android:text="106.15.237.67" android:text="10.17.4.207"
android:imeActionLabel="@string/action_sign_in_short" android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent" android:baselineAligned="false"
android:layout_height="match_parent"> android:layout_height="match_parent">
<ScrollView <ScrollView
......
...@@ -35,18 +35,10 @@ import com.ccwangluo.ccim.modle.User; ...@@ -35,18 +35,10 @@ import com.ccwangluo.ccim.modle.User;
import com.ccwangluo.ccim.util.ErrorCode; import com.ccwangluo.ccim.util.ErrorCode;
import com.ccwangluo.ccim.util.MediaHelper; import com.ccwangluo.ccim.util.MediaHelper;
import com.ccwangluo.ccim.util.PermissionUtils; import com.ccwangluo.ccim.util.PermissionUtils;
import com.github.helloiampau.janus.generated.Bundle;
import com.github.helloiampau.janus.generated.JanusEvent;
import com.github.helloiampau.janus.generated.JanusPlugins; import com.github.helloiampau.janus.generated.JanusPlugins;
import com.github.helloiampau.janusclientsdk.JanusConfImpl; import com.github.helloiampau.janusclientsdk.JanusConfImpl;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.protobuf.util.JsonFormat; import com.google.protobuf.util.JsonFormat;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
...@@ -55,6 +47,7 @@ import java.util.concurrent.Executors; ...@@ -55,6 +47,7 @@ import java.util.concurrent.Executors;
import java.util.logging.Logger; import java.util.logging.Logger;
import ccim.protocol.Chat; import ccim.protocol.Chat;
import ccim.protocol.Common;
import ccim.protocol.MessageSpec; import ccim.protocol.MessageSpec;
import ccim.protocol.Push; import ccim.protocol.Push;
...@@ -75,6 +68,7 @@ public class CCIMClient { ...@@ -75,6 +68,7 @@ public class CCIMClient {
private final int minAudioDuration = 500; private final int minAudioDuration = 500;
public String downloadPrefix; public String downloadPrefix;
public String cachePath; public String cachePath;
public Long mutedExpiredAt = 0L; //禁言时间
public Handler handler = new Handler(Looper.getMainLooper()); public Handler handler = new Handler(Looper.getMainLooper());
private ExecutorService executor = Executors.newSingleThreadExecutor(); private ExecutorService executor = Executors.newSingleThreadExecutor();
...@@ -145,6 +139,42 @@ public class CCIMClient { ...@@ -145,6 +139,42 @@ public class CCIMClient {
}); });
initCachePath(context); initCachePath(context);
registerMessageListener(new OnPushMsgListener() {
@Override
public void pushPrivateMsg(MessageContent msg) {
}
@Override
public void pushChannelMsg(MessageContent msg) {
}
@Override
public void pushNewContact(Contact contact) {
}
@Override
public void pushDeleteContact(Long contactId) {
}
@Override
public void pushContactNetStatus(Long contactId, NetStatus status) {
}
@Override
public void pushContactNewReq(User user) {
}
@Override
public void pushUserMutedRes(Long mutedExpiredAt) {
}
});
} }
/** /**
...@@ -250,6 +280,16 @@ public class CCIMClient { ...@@ -250,6 +280,16 @@ public class CCIMClient {
pushMsgListener.pushDeleteContact(userId); pushMsgListener.pushDeleteContact(userId);
} }
if (chatResponseMessage.hasPushUserMutedRes()) {
Push.PushUserMutedResponse pushUserMutedRes = chatResponseMessage.getPushUserMutedRes();
mutedExpiredAt = pushUserMutedRes.getMutedExpiredAt();
pushMsgListener.pushUserMutedRes(mutedExpiredAt);
if (!checkMutedExpired() && janusService != null) {
janusService.setLocalAudio(false);
}
}
} }
@Override @Override
...@@ -397,6 +437,17 @@ public class CCIMClient { ...@@ -397,6 +437,17 @@ public class CCIMClient {
return true; return true;
} }
/**
* 校验被禁言时间
*/
public boolean checkMutedExpired() {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis < mutedExpiredAt) {
return false;
}
return true;
}
/** /**
* 发送消息 * 发送消息
*/ */
...@@ -410,6 +461,12 @@ public class CCIMClient { ...@@ -410,6 +461,12 @@ public class CCIMClient {
callback.onFailed(ErrorCode.SEND_MSG_INTERVAL); callback.onFailed(ErrorCode.SEND_MSG_INTERVAL);
return; return;
} }
if (!checkMutedExpired()) {
callback.onFailed(Common.StatusCode.STATUS_CODE_USER_MUTED_ERROR.getNumber());
return;
}
messageManager.sendPrivateMessage(content, receiveUserId, MessageSpec.MessageType.MESSAGE_TYPE_TEXT, new ResultEventCallback<MessageContent>() { messageManager.sendPrivateMessage(content, receiveUserId, MessageSpec.MessageType.MESSAGE_TYPE_TEXT, new ResultEventCallback<MessageContent>() {
@Override @Override
...@@ -438,6 +495,10 @@ public class CCIMClient { ...@@ -438,6 +495,10 @@ public class CCIMClient {
callback.onFailed(ErrorCode.SEND_MSG_INTERVAL); callback.onFailed(ErrorCode.SEND_MSG_INTERVAL);
return; return;
} }
if (!checkMutedExpired()) {
callback.onFailed(Common.StatusCode.STATUS_CODE_USER_MUTED_ERROR.getNumber());
return;
}
messageManager.sendChannelMessage(content, channelId, MessageSpec.MessageType.MESSAGE_TYPE_TEXT, callback); messageManager.sendChannelMessage(content, channelId, MessageSpec.MessageType.MESSAGE_TYPE_TEXT, callback);
} }
...@@ -486,6 +547,10 @@ public class CCIMClient { ...@@ -486,6 +547,10 @@ public class CCIMClient {
* 开始录音 * 开始录音
*/ */
public void startRecordAudioMessage(Context context, Long receiveUserId, String receiveUserName, ResultEventCallback<Void> resultCallback, RecordAutoSendCallback callback) { public void startRecordAudioMessage(Context context, Long receiveUserId, String receiveUserName, ResultEventCallback<Void> resultCallback, RecordAutoSendCallback callback) {
if (!checkMutedExpired()) {
resultCallback.onFailed(Common.StatusCode.STATUS_CODE_USER_MUTED_ERROR.getNumber());
return;
}
PermissionUtils.check(context, Manifest.permission.RECORD_AUDIO, new ResultEventCallback<Void>() { PermissionUtils.check(context, Manifest.permission.RECORD_AUDIO, new ResultEventCallback<Void>() {
@Override @Override
public void onSuccess(Void o) { public void onSuccess(Void o) {
...@@ -563,6 +628,10 @@ public class CCIMClient { ...@@ -563,6 +628,10 @@ public class CCIMClient {
* 开始录音 * 开始录音
*/ */
public void startRecordChannelAudioMessage(Context context, Long channelID, ResultEventCallback<Void> resultCallback, RecordAutoSendCallback callback) { public void startRecordChannelAudioMessage(Context context, Long channelID, ResultEventCallback<Void> resultCallback, RecordAutoSendCallback callback) {
if (!checkMutedExpired()) {
resultCallback.onFailed(Common.StatusCode.STATUS_CODE_USER_MUTED_ERROR.getNumber());
return;
}
PermissionUtils.check(context, Manifest.permission.RECORD_AUDIO, new ResultEventCallback<Void>() { PermissionUtils.check(context, Manifest.permission.RECORD_AUDIO, new ResultEventCallback<Void>() {
@Override @Override
public void onSuccess(Void o) { public void onSuccess(Void o) {
...@@ -699,9 +768,13 @@ public class CCIMClient { ...@@ -699,9 +768,13 @@ public class CCIMClient {
/** /**
* 是否禁言自己 * 是否禁言自己
*
* @param enable * @param enable
*/ */
public void setLocalAudio(boolean enable) { public void setLocalAudio(boolean enable) {
if (!checkMutedExpired()) {
return;
}
if (janusService != null) { if (janusService != null) {
janusService.setLocalAudio(enable); janusService.setLocalAudio(enable);
} }
......
...@@ -132,6 +132,9 @@ public class JanusService extends JanusDelegate { ...@@ -132,6 +132,9 @@ public class JanusService extends JanusDelegate {
public void onMediaChanged(MediaBundle media) { public void onMediaChanged(MediaBundle media) {
if ( media.localAudioTrack() != null) { if ( media.localAudioTrack() != null) {
audioTrack = media.localAudioTrack(); audioTrack = media.localAudioTrack();
if (!CCIMClient.getInstance().checkMutedExpired()){
audioTrack.setEnabled(false);
}
} }
} }
......
...@@ -23,9 +23,9 @@ public interface MessageDao { ...@@ -23,9 +23,9 @@ public interface MessageDao {
@Query("SELECT * FROM messagecontent where msgId = :msgId") @Query("SELECT * FROM messagecontent where msgId = :msgId")
MessageContent getMsgById(Long msgId); MessageContent getMsgById(Long msgId);
@Query("SELECT * FROM messagecontent order by msgId desc limit 1") @Query("SELECT * FROM messagecontent where reciveUserId =:userId order by msgId desc limit 1")
MessageContent getLastMsgById(); MessageContent getLastMsgById(long userId);
@Query("SELECT count(*) FROM messagecontent where senderUserId = :userId and msgId > :msgId") @Query("SELECT count(*) FROM messagecontent where senderUserId = :userId and reciveUserId=:myUserId and msgId > :msgId")
Long selectOfflineCount(Long userId,Long msgId); Long selectOfflineCount(Long userId, Long myUserId, Long msgId);
} }
...@@ -19,4 +19,6 @@ public interface OnPushMsgListener { ...@@ -19,4 +19,6 @@ public interface OnPushMsgListener {
void pushContactNewReq(User user); void pushContactNewReq(User user);
void pushUserMutedRes(Long mutedExpiredAt);
} }
...@@ -54,13 +54,14 @@ public class MessageManager { ...@@ -54,13 +54,14 @@ public class MessageManager {
private List<MessageContent> messageContentList = new ArrayList<>(); private List<MessageContent> messageContentList = new ArrayList<>();
/** /**
* 同步离线消息 * 同步离线消息
*/ */
public void getOfflineMessage(ResultEventCallback<Void> resultEventCallback) { public void getOfflineMessage(ResultEventCallback<Void> resultEventCallback) {
executor.execute(() -> { executor.execute(() -> {
long lastPullMsgId = 0; long lastPullMsgId = 0;
MessageContent lastMsgById = db.messageDao().getLastMsgById(); MessageContent lastMsgById = db.messageDao().getLastMsgById(userId);
if (lastMsgById != null) { if (lastMsgById != null) {
lastPullMsgId = lastMsgById.getMsgId(); lastPullMsgId = lastMsgById.getMsgId();
} }
...@@ -79,7 +80,7 @@ public class MessageManager { ...@@ -79,7 +80,7 @@ public class MessageManager {
}); });
} }
public void getOfflineMessageOnce(Long lastPullMsgId,ResultEventCallback<Void> callback) { public void getOfflineMessageOnce(Long lastPullMsgId, ResultEventCallback<Void> callback) {
Message.PullOfflineMessageRequest offlineMessageRequest = Message.PullOfflineMessageRequest.newBuilder() Message.PullOfflineMessageRequest offlineMessageRequest = Message.PullOfflineMessageRequest.newBuilder()
.setLastPulledMsgId(lastPullMsgId) .setLastPulledMsgId(lastPullMsgId)
.build(); .build();
...@@ -96,7 +97,7 @@ public class MessageManager { ...@@ -96,7 +97,7 @@ public class MessageManager {
String print = JsonFormat.printer().print(chatResponseMessage.getPullOfflineMsgRes()); String print = JsonFormat.printer().print(chatResponseMessage.getPullOfflineMsgRes());
PullOffLineMessageRes pullOffLineMessageRes = gson.fromJson(print, PullOffLineMessageRes.class); PullOffLineMessageRes pullOffLineMessageRes = gson.fromJson(print, PullOffLineMessageRes.class);
List<MessageContent> message = pullOffLineMessageRes.getOfflineMessages(); List<MessageContent> message = pullOffLineMessageRes.getOfflineMessages();
if (message == null){ if (message == null) {
callback.onSuccess(null); callback.onSuccess(null);
return; return;
} }
...@@ -108,8 +109,8 @@ public class MessageManager { ...@@ -108,8 +109,8 @@ public class MessageManager {
messageContentList.addAll(message); messageContentList.addAll(message);
pushNewMessageList(message); pushNewMessageList(message);
Long msgId = message.get(message.size() - 1).getMsgId(); Long msgId = message.get(message.size() - 1).getMsgId();
if (message.size() > 0 && msgId<= lastPullMsgId){ if (message.size() > 0 && msgId >= lastPullMsgId) {
getOfflineMessageOnce(msgId,callback); getOfflineMessageOnce(msgId, callback);
} else { } else {
callback.onSuccess(null); callback.onSuccess(null);
} }
...@@ -251,7 +252,7 @@ public class MessageManager { ...@@ -251,7 +252,7 @@ public class MessageManager {
} }
public void playAudio(Long msgId, String downloadPrefix, String cachePath, OnPlayAudioCallback resultCallback,Float volume) { public void playAudio(Long msgId, String downloadPrefix, String cachePath, OnPlayAudioCallback resultCallback, Float volume) {
executor.execute(() -> { executor.execute(() -> {
MessageContent messageContent = db.messageDao().getMsgById(msgId); MessageContent messageContent = db.messageDao().getMsgById(msgId);
if (messageContent == null) { if (messageContent == null) {
...@@ -268,7 +269,7 @@ public class MessageManager { ...@@ -268,7 +269,7 @@ public class MessageManager {
FileUtils.downLoadFile(url, file, new ResultEventCallback<File>() { FileUtils.downLoadFile(url, file, new ResultEventCallback<File>() {
@Override @Override
public void onSuccess(File file) { public void onSuccess(File file) {
MediaHelper.getInstance().play(file.getAbsolutePath(), resultCallback,volume); MediaHelper.getInstance().play(file.getAbsolutePath(), resultCallback, volume);
} }
@Override @Override
...@@ -277,7 +278,7 @@ public class MessageManager { ...@@ -277,7 +278,7 @@ public class MessageManager {
} }
}); });
} else { } else {
MediaHelper.getInstance().play(file.getAbsolutePath(), resultCallback,volume); MediaHelper.getInstance().play(file.getAbsolutePath(), resultCallback, volume);
} }
}); });
...@@ -441,7 +442,7 @@ public class MessageManager { ...@@ -441,7 +442,7 @@ public class MessageManager {
}); });
} }
public Long getOfflineMessageCountByUserId(Long userId,Long msgId) { public Long getOfflineMessageCountByUserId(Long userId, Long msgId) {
return db.messageDao().selectOfflineCount(userId,msgId); return db.messageDao().selectOfflineCount(userId, this.userId, msgId);
} }
} }
...@@ -10,7 +10,7 @@ public class Dialog { ...@@ -10,7 +10,7 @@ public class Dialog {
private DialogType dialogType; private DialogType dialogType;
private NetStatus netStatus = NetStatus.NET_STATUS_ONLINE; private NetStatus netStatus = NetStatus.NET_STATUS_ONLINE;
private String extData; private String extData;
private Long readMsgId; private Long readMsgId = 0L;
private Long unreadCount = 0L; private Long unreadCount = 0L;
public void setUnreadCount(Long unreadCount) { public void setUnreadCount(Long unreadCount) {
......
...@@ -2,6 +2,8 @@ syntax = "proto3"; ...@@ -2,6 +2,8 @@ syntax = "proto3";
package ccim.protocol; package ccim.protocol;
option csharp_namespace = "CCIM.Protocol";
import "channel.proto"; import "channel.proto";
import "common.proto"; import "common.proto";
import "contact.proto"; import "contact.proto";
...@@ -88,6 +90,7 @@ message ChatResponseMessage { ...@@ -88,6 +90,7 @@ message ChatResponseMessage {
PushContactNetStatusResponse push_contact_net_status_res = 73; // 推送联系人网络状态 PushContactNetStatusResponse push_contact_net_status_res = 73; // 推送联系人网络状态
PushContactNewReqResponse push_contact_new_req_res = 74; // 推送新的好友申请 PushContactNewReqResponse push_contact_new_req_res = 74; // 推送新的好友申请
PushUserDeletedResponse push_user_deleted_res = 76; // 推送与自己有关系(对话过的陌生人或好友)的用户已删除 PushUserDeletedResponse push_user_deleted_res = 76; // 推送与自己有关系(对话过的陌生人或好友)的用户已删除
PushUserMutedResponse push_user_muted_res = 77; // 推送用户被禁言
PullPrivateMessageResponse pull_private_msg_res = 81; // 拉取私聊消息 PullPrivateMessageResponse pull_private_msg_res = 81; // 拉取私聊消息
PullChannelMessageResponse pull_channel_msg_res = 82; // 拉取频道消息 PullChannelMessageResponse pull_channel_msg_res = 82; // 拉取频道消息
......
...@@ -52,3 +52,7 @@ message PushContactNewReqResponse { ...@@ -52,3 +52,7 @@ message PushContactNewReqResponse {
message PushUserDeletedResponse { message PushUserDeletedResponse {
int64 user_id = 1; int64 user_id = 1;
} }
message PushUserMutedResponse {
int64 muted_expired_at = 1;
}
\ No newline at end of file
...@@ -11,11 +11,6 @@ message BlockUserRequest { ...@@ -11,11 +11,6 @@ message BlockUserRequest {
message BlockUserResponse { message BlockUserResponse {
} }
message MuteUserEvent {
int64 muted_user_id = 1;
int64 muted_expired_at = 2;
}
message PreUploadSignRequest { message PreUploadSignRequest {
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment