Commit 97d73337 authored by fallenstardust's avatar fallenstardust

添加登录信息记录

parent 62919e3c
...@@ -69,7 +69,6 @@ public class DeckSquareFragment extends Fragment { ...@@ -69,7 +69,6 @@ public class DeckSquareFragment extends Fragment {
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
} }
Log.d("seesee sortlike", sortLike.toString());
deckSquareListAdapter.loadData(targetPage, 30, "", sortLike, false, ""); deckSquareListAdapter.loadData(targetPage, 30, "", sortLike, false, "");
} }
}); });
......
...@@ -7,6 +7,7 @@ import android.os.Bundle; ...@@ -7,6 +7,7 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
...@@ -21,11 +22,15 @@ import cn.garymb.ygomobile.lite.R; ...@@ -21,11 +22,15 @@ import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareMyDeckBinding; import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareMyDeckBinding;
import cn.garymb.ygomobile.ui.activities.WebActivity; import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.mycard.MyCard; import cn.garymb.ygomobile.ui.mycard.MyCard;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil; import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil; import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGODeckDialogUtil; import cn.garymb.ygomobile.utils.YGODeckDialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
//打开页面后,先扫描本地的卡组,读取其是否包含deckId,是的话代表平台上可能有 //打开页面后,先扫描本地的卡组,读取其是否包含deckId,是的话代表平台上可能有
//之后读取平台上的卡组,与本地卡组列表做比较。 //之后读取平台上的卡组,与本地卡组列表做比较。
...@@ -145,6 +150,12 @@ public class DeckSquareMyDeckFragment extends Fragment { ...@@ -145,6 +150,12 @@ public class DeckSquareMyDeckFragment extends Fragment {
binding.progressBar.setVisibility(View.GONE); binding.progressBar.setVisibility(View.GONE);
binding.btnLogin.setEnabled(true); binding.btnLogin.setEnabled(true);
YGOUtil.showTextToast(R.string.login_succeed); YGOUtil.showTextToast(R.string.login_succeed);
McUser mcUser = new McUser();
mcUser.setUsername(result.user.username);
mcUser.setExternal_id(result.user.id);
mcUser.setAvatar_url(ChatMessage.getAvatarUrl(result.user.username));
GlideCompat.with(getActivity()).load(mcUser.getAvatar_url()).into(binding.myDeckAvatar);//刷新头像图片
UserManagement.getDx().setMcUser(mcUser);
} else { } else {
YGOUtil.showTextToast(R.string.logining_failed); YGOUtil.showTextToast(R.string.logining_failed);
binding.llMainUi.setVisibility(View.GONE); binding.llMainUi.setVisibility(View.GONE);
......
...@@ -72,7 +72,7 @@ public class ChatMessage { ...@@ -72,7 +72,7 @@ public class ChatMessage {
this.avatar = getAvatarUrl(name); this.avatar = getAvatarUrl(name);
} }
public String getAvatarUrl(String userName) { public static String getAvatarUrl(String userName) {
return "https://sapi.moecube.com:444/avatar/avatar/" + userName + "/100/ygomobile.png"; return "https://sapi.moecube.com:444/avatar/avatar/" + userName + "/100/ygomobile.png";
} }
......
...@@ -2,6 +2,8 @@ package cn.garymb.ygomobile.ui.mycard.mcchat.management; ...@@ -2,6 +2,8 @@ package cn.garymb.ygomobile.ui.mycard.mcchat.management;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
...@@ -20,7 +22,9 @@ import org.jxmpp.stringprep.XmppStringprepException; ...@@ -20,7 +22,9 @@ import org.jxmpp.stringprep.XmppStringprepException;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import cn.garymb.ygomobile.ui.mycard.base.OnJoinChatListener; import cn.garymb.ygomobile.ui.mycard.base.OnJoinChatListener;
import cn.garymb.ygomobile.ui.mycard.bean.McUser; import cn.garymb.ygomobile.ui.mycard.bean.McUser;
...@@ -45,142 +49,121 @@ public class ServiceManagement { ...@@ -45,142 +49,121 @@ public class ServiceManagement {
public static final int CHAT_USER_NULL = 8; public static final int CHAT_USER_NULL = 8;
private static final ServiceManagement su = new ServiceManagement(); private static final ServiceManagement su = new ServiceManagement();
private XMPPTCPConnection con;
private MultiUserChat muc;
private boolean isConnected = false;
private boolean isListener = false;
private boolean isStartLoading=false;
private final List<ChatMessage> chatMessageList; private final List<ChatMessage> chatMessageList;
private final List<ChatListener> chatListenerList; private final ConcurrentHashMap<Integer, ChatListener> chatListenerList;
private final List<OnJoinChatListener> joinChatListenerList; private final ConcurrentHashMap<Integer, OnJoinChatListener> joinChatListenerList;
private int chatListenerId = 0;
private int joinChatListenerId = 0;
@SuppressLint("HandlerLeak") @SuppressLint("HandlerLeak")
Handler han = new Handler() { private final Handler han = new Handler(Looper.getMainLooper()) {
@Override @Override
public void handleMessage(android.os.Message msg) { public void handleMessage(Message msg) {
// TODO: Implement this method
super.handleMessage(msg);
int i = 0;
switch (msg.what) { switch (msg.what) {
case TYPE_ADD_MESSAGE: case TYPE_ADD_MESSAGE:
while (i < chatListenerList.size()) { broadcastChatMessage((ChatMessage) msg.obj);
ChatListener chatListener = chatListenerList.get(i);
if (chatListener.isListenerEffective()) {
chatListener.addChatMessage((ChatMessage) msg.obj);
i++;
} else {
chatListenerList.remove(i);
}
}
break; break;
case TYPE_RE_LOGIN: case TYPE_RE_LOGIN:
while (i < chatListenerList.size()) { broadcastReLogin((boolean) msg.obj);
ChatListener chatListener = chatListenerList.get(i);
if (chatListener.isListenerEffective()) {
chatListener.reChatLogin((boolean) msg.obj);
i++;
} else {
chatListenerList.remove(i);
}
}
break; break;
case TYPE_RE_JOIN: case TYPE_RE_JOIN:
broadcastReJoin((boolean) msg.obj);
while (i < chatListenerList.size()) {
ChatListener chatListener = chatListenerList.get(i);
if (chatListener.isListenerEffective()) {
chatListener.reChatJoin((boolean) msg.obj);
i++;
} else {
chatListenerList.remove(i);
}
}
break; break;
case CHAT_LOGIN_EXCEPTION_RE: case CHAT_LOGIN_EXCEPTION_RE:
// while (i < joinChatListenerList.size()) { // 处理重新登录异常的逻辑
// OnJoinChatListener ou = joinChatListenerList.get(i); //for (OnJoinChatListener listener : joinChatListenerList.values()) {
// if (ou.isListenerEffective()) { // if (listener != null && listener.isListenerEffective()) {
// ou.onLoginExceptionClickRe(); // listener.onLoginExceptionClickRe();
// i++; // }
// } else { //}
// joinChatListenerList.remove(i); //break;
// }
// }
// break;
case CHAT_LOGIN_OK: case CHAT_LOGIN_OK:
while (i < joinChatListenerList.size()) { for (OnJoinChatListener listener : joinChatListenerList.values()) {
OnJoinChatListener onJoinChatListener = joinChatListenerList.get(i); if (listener != null && listener.isListenerEffective()) {
if (onJoinChatListener.isListenerEffective()) { listener.onChatLogin(null);
onJoinChatListener.onChatLogin(null);
i++;
} else {
joinChatListenerList.remove(i);
} }
} }
break; break;
case CHAT_LOGIN_EXCEPTION: case CHAT_LOGIN_EXCEPTION:
while (i < joinChatListenerList.size()) { for (OnJoinChatListener listener : joinChatListenerList.values()) {
OnJoinChatListener onJoinChatListener = joinChatListenerList.get(i); if (listener != null && listener.isListenerEffective()) {
if (onJoinChatListener.isListenerEffective()) { listener.onChatLogin(msg.obj + "");
onJoinChatListener.onChatLogin(msg.obj + "");
i++;
} else {
joinChatListenerList.remove(i);
} }
} }
break; break;
case CHAT_LOGIN_LOADING: case CHAT_LOGIN_LOADING:
while (i < joinChatListenerList.size()) { for (OnJoinChatListener listener : joinChatListenerList.values()) {
OnJoinChatListener onJoinChatListener = joinChatListenerList.get(i); if (listener != null && listener.isListenerEffective()) {
if (onJoinChatListener.isListenerEffective()) { listener.onChatLoginLoading();
onJoinChatListener.onChatLoginLoading();
i++;
} else {
joinChatListenerList.remove(i);
} }
} }
break; break;
case CHAT_JOIN_ROOM_LOADING: case CHAT_JOIN_ROOM_LOADING:
while (i < joinChatListenerList.size()) { for (OnJoinChatListener listener : joinChatListenerList.values()) {
OnJoinChatListener onJoinChatListener = joinChatListenerList.get(i); if (listener != null && listener.isListenerEffective()) {
if (onJoinChatListener.isListenerEffective()) { listener.onJoinRoomLoading();
onJoinChatListener.onJoinRoomLoading();
i++;
} else {
joinChatListenerList.remove(i);
} }
} }
break; break;
case CHAT_USER_NULL: case CHAT_USER_NULL:
while (i < joinChatListenerList.size()) { for (OnJoinChatListener listener : joinChatListenerList.values()) {
OnJoinChatListener onJoinChatListener = joinChatListenerList.get(i); if (listener != null && listener.isListenerEffective()) {
if (onJoinChatListener.isListenerEffective()) { listener.onChatUserNull();
onJoinChatListener.onChatUserNull();
i++;
} else {
joinChatListenerList.remove(i);
} }
} }
break; break;
} }
} }
private void broadcastChatMessage(ChatMessage message) {
for (ChatListener listener : chatListenerList.values()) {
if (listener != null && listener.isListenerEffective()) {
listener.addChatMessage(message);
}
}
}
private void broadcastReLogin(boolean state) {
for (ChatListener listener : chatListenerList.values()) {
if (listener != null && listener.isListenerEffective()) {
listener.reChatLogin(state);
}
}
}
private void broadcastReJoin(boolean state) {
for (ChatListener listener : chatListenerList.values()) {
if (listener != null && listener.isListenerEffective()) {
listener.reChatJoin(state);
}
}
}
}; };
private XMPPTCPConnection con;
private MultiUserChat muc;
private boolean isConnected = false;
private boolean isListener = false;
private boolean isStartLoading = false;
private ServiceManagement() { private ServiceManagement() {
chatMessageList = new ArrayList<>(); chatMessageList = Collections.synchronizedList(new ArrayList<>());
chatListenerList = new ArrayList<>(); chatListenerList = new ConcurrentHashMap<>();
joinChatListenerList = new ArrayList<>(); joinChatListenerList = new ConcurrentHashMap<>();
} }
public static ServiceManagement getDx() { public static ServiceManagement getDx() {
return su; return su;
} }
public void addListener(ChatListener c) { public int addListener(ChatListener c) {
chatListenerList.add(c); int id = ++chatListenerId;
chatListenerList.put(id, c);
return id;
}
public void removeListener(int id) {
chatListenerList.remove(id);
} }
public List<ChatMessage> getData() { public List<ChatMessage> getData() {
...@@ -233,28 +216,36 @@ public class ServiceManagement { ...@@ -233,28 +216,36 @@ public class ServiceManagement {
} }
public void sendMessage(String message) throws SmackException.NotConnectedException, InterruptedException { public void sendMessage(String message) throws SmackException.NotConnectedException, InterruptedException {
muc.sendMessage(message); if (muc != null && isListener) {
muc.sendMessage(message);
}
} }
public int getMemberNum(){ public int getMemberNum() {
if (!isListener) if (!isListener || muc == null)
return 0; return 0;
return muc.getOccupantsCount(); return muc.getOccupantsCount();
} }
public void joinChat() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, MultiUserChatException.NotAMucServiceException, SmackException.NotConnectedException, XmppStringprepException, MultiUserChatException.MucAlreadyJoinedException, InterruptedException { public void joinChat() throws SmackException.NoResponseException, XMPPException.XMPPErrorException,
MultiUserChatException.NotAMucServiceException, SmackException.NotConnectedException,
XmppStringprepException, MultiUserChatException.MucAlreadyJoinedException, InterruptedException {
if (!isListener) { if (!isListener) {
McUser mcUser = UserManagement.getDx().getMcUser();
if (mcUser == null || TextUtils.isEmpty(mcUser.getUsername())) {
throw new IllegalStateException("User not logged in");
}
MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor(getCon()); MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor(getCon());
muc = multiUserChatManager.getMultiUserChat(JidCreate.entityBareFrom(GROUP_ADDRESS)); muc = multiUserChatManager.getMultiUserChat(JidCreate.entityBareFrom(GROUP_ADDRESS));
muc.createOrJoin(Resourcepart.from(UserManagement.getDx().getMcUser().getUsername())); muc.createOrJoin(Resourcepart.from(mcUser.getUsername()));
chatMessageList.clear(); chatMessageList.clear();
muc.addMessageListener(message -> { muc.addMessageListener(message -> {
Log.e("接收消息", "接收" + message); Log.e("接收消息", "接收" + message);
ChatMessage cm = ChatMessage.toChatMessage(message); ChatMessage cm = ChatMessage.toChatMessage(message);
if (cm != null) { if (cm != null) {
chatMessageList.add(cm); chatMessageList.add(cm);
HandlerUtil.sendMessage(han,TYPE_ADD_MESSAGE,cm); HandlerUtil.sendMessage(han, TYPE_ADD_MESSAGE, cm);
} }
}); });
setIsListener(true); setIsListener(true);
...@@ -262,23 +253,36 @@ public class ServiceManagement { ...@@ -262,23 +253,36 @@ public class ServiceManagement {
} }
public void setReLogin(boolean state) { public void setReLogin(boolean state) {
android.os.Message me = new android.os.Message(); Message me = new Message();
me.what = TYPE_RE_LOGIN; me.what = TYPE_RE_LOGIN;
me.obj = state; me.obj = state;
han.sendMessage(me); han.sendMessage(me);
} }
public void setReJoin(boolean state) { public void setReJoin(boolean state) {
android.os.Message me = new android.os.Message(); Message me = new Message();
me.what = TYPE_RE_JOIN; me.what = TYPE_RE_JOIN;
me.obj = state; me.obj = state;
han.sendMessage(me); han.sendMessage(me);
} }
public void disSerVice() { public void disSerVice() {
if (muc != null) {
try {
if (isListener) {
muc.leave();
}
} catch (SmackException.NotConnectedException | InterruptedException e) {
Log.e("ServiceManagement", "Error leaving MUC", e);
}
muc = null;
}
if (con != null) { if (con != null) {
con.disconnect(); con.disconnect();
con = null;
} }
setIsConnected(false); setIsConnected(false);
setIsListener(false); setIsListener(false);
} }
...@@ -290,28 +294,32 @@ public class ServiceManagement { ...@@ -290,28 +294,32 @@ public class ServiceManagement {
joinChatListenerList.clear(); joinChatListenerList.clear();
} }
public void addJoinRoomListener(OnJoinChatListener onJoinChatListener) { public int addJoinRoomListener(OnJoinChatListener onJoinChatListener) {
joinChatListenerList.add(onJoinChatListener); int id = ++joinChatListenerId;
joinChatListenerList.put(id, onJoinChatListener);
return id;
} }
public void removeJoinRoomListener(OnJoinChatListener onJoinChatListener) { public void removeJoinRoomListener(int id) {
joinChatListenerList.remove(onJoinChatListener); joinChatListenerList.remove(id);
} }
public void start() { public void start() {
if (isStartLoading) if (isStartLoading)
return; return;
isStartLoading=true; isStartLoading = true;
String name, password; String name, password;
McUser mcUser=UserManagement.getDx().getMcUser(); McUser mcUser = UserManagement.getDx().getMcUser();
name=mcUser.getUsername();
password=mcUser.getPassword(); if (mcUser == null || TextUtils.isEmpty(mcUser.getUsername()) || TextUtils.isEmpty(mcUser.getPassword())) {
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(password)) {
isStartLoading = false; isStartLoading = false;
han.sendEmptyMessage(CHAT_USER_NULL); han.sendEmptyMessage(CHAT_USER_NULL);
return; return;
} }
name = mcUser.getUsername();
password = mcUser.getPassword();
if (su.isListener()) { if (su.isListener()) {
isStartLoading = false; isStartLoading = false;
han.sendEmptyMessage(CHAT_LOGIN_OK); han.sendEmptyMessage(CHAT_LOGIN_OK);
...@@ -321,52 +329,51 @@ public class ServiceManagement { ...@@ -321,52 +329,51 @@ public class ServiceManagement {
new Thread(() -> { new Thread(() -> {
if (!su.isConnected()) { if (!su.isConnected()) {
han.sendEmptyMessage(CHAT_LOGIN_LOADING); han.sendEmptyMessage(CHAT_LOGIN_LOADING);
android.os.Message me = new android.os.Message(); Message me = new Message();
me.what = CHAT_LOGIN_EXCEPTION; me.what = CHAT_LOGIN_EXCEPTION;
try { try {
su.login(name, password); su.login(name, password);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); Log.e("ServiceManagement", "Login interrupted", e);
isStartLoading=false; isStartLoading = false;
me.obj = "InterruptedException:" + e; me.obj = "InterruptedException:" + e;
han.sendMessage(me); han.sendMessage(me);
} catch (IOException e) { } catch (IOException e) {
isStartLoading=false; Log.e("ServiceManagement", "IO error during login", e);
isStartLoading = false;
me.obj = "IOException:" + e; me.obj = "IOException:" + e;
e.printStackTrace();
han.sendMessage(me); han.sendMessage(me);
} catch (SmackException e) { } catch (SmackException e) {
isStartLoading=false; Log.e("ServiceManagement", "Smack error during login", e);
isStartLoading = false;
me.obj = "SmackException:" + e; me.obj = "SmackException:" + e;
e.printStackTrace();
han.sendMessage(me); han.sendMessage(me);
} catch (XMPPException e) { } catch (XMPPException e) {
isStartLoading=false; Log.e("ServiceManagement", "XMPP error during login", e);
isStartLoading = false;
me.obj = "XMPPException:" + e; me.obj = "XMPPException:" + e;
e.printStackTrace();
han.sendMessage(me); han.sendMessage(me);
} catch (Exception e) { } catch (Exception e) {
isStartLoading=false; Log.e("ServiceManagement", "Other error during login", e);
isStartLoading = false;
me.obj = "otherException:" + e; me.obj = "otherException:" + e;
e.printStackTrace();
han.sendMessage(me); han.sendMessage(me);
} }
} }
if (su.isConnected()) { if (su.isConnected()) {
han.sendEmptyMessage(CHAT_JOIN_ROOM_LOADING); han.sendEmptyMessage(CHAT_JOIN_ROOM_LOADING);
try { try {
su.joinChat(); su.joinChat();
isStartLoading=false; isStartLoading = false;
han.sendEmptyMessage(CHAT_LOGIN_OK); han.sendEmptyMessage(CHAT_LOGIN_OK);
} catch (Exception e) { } catch (Exception e) {
isStartLoading=false; Log.e("ServiceManagement", "Error joining chat", e);
isStartLoading = false;
HandlerUtil.sendMessage(han, CHAT_LOGIN_EXCEPTION, e); HandlerUtil.sendMessage(han, CHAT_LOGIN_EXCEPTION, e);
} }
} }
// TODO: Implement this method
}).start(); }).start();
} }
}
} \ No newline at end of file
...@@ -144,19 +144,24 @@ ...@@ -144,19 +144,24 @@
tools:layout_editor_absoluteY="16dp" /> tools:layout_editor_absoluteY="16dp" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom" android:layout_gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="16dp"> android:padding="16dp">
<cn.garymb.ygomobile.ui.mycard.mcchat.view.YuanImage
android:id="@+id/my_deck_avatar"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/avatar"/>
<Button <Button
android:id="@+id/mc_logout_btn" android:id="@+id/mc_logout_btn"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="4dp" android:layout_marginEnd="4dp"
android:layout_weight="1" android:background="@drawable/button_radius_black_transparents"
android:background="@drawable/ic_radius_bg"
android:text="注销" /> android:text="注销" />
</LinearLayout> </LinearLayout>
......
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