Skip to content

Commit 972efe2

Browse files
committed
2.0.1
1 parent 6e4475a commit 972efe2

File tree

17 files changed

+194
-68
lines changed

17 files changed

+194
-68
lines changed

conf/nbs.db

0 Bytes
Binary file not shown.

src/main/java/com/nbs/ui/panels/ContactsPanel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private void getPeerAvatar(){
136136

137137

138138
/**
139-
* 初始化Demo TODO
139+
* 初始化 TODO 数据库匹配补全信息
140140
* @return
141141
*/
142142
private List<ContactsEntity> getContacts(){
Lines changed: 79 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package io.nbs.client.adapter;
22

3+
import com.alibaba.fastjson.JSON;
34
import io.nbs.client.listener.OnlineNotifier;
45
import io.nbs.client.ui.components.NbsListView;
6+
import io.nbs.client.ui.frames.MainFrame;
57
import io.nbs.client.ui.panels.im.IMPeersPanel;
68
import io.nbs.client.vo.ContactsItem;
79
import io.nbs.sdk.beans.OnlineMessage;
@@ -10,7 +12,10 @@
1012
import io.nbs.sdk.prot.IPMTypes;
1113
import org.apache.commons.lang3.StringUtils;
1214
import org.apache.ibatis.session.SqlSession;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
1317

18+
import java.util.ArrayList;
1419
import java.util.HashMap;
1520
import java.util.List;
1621
import java.util.Map;
@@ -24,48 +29,95 @@
2429
* All rights reserved.
2530
*/
2631
public class ContactOnlineAdapter implements OnlineNotifier {
32+
private static Logger logger = LoggerFactory.getLogger(ContactOnlineAdapter.class);
2733
private SqlSession sqlSession;
2834

2935
private static Map<String,ContactsItem> contactsCacheMap ;
36+
private PeerInfo info;
3037

31-
public ContactOnlineAdapter(SqlSession sqlSession, List<ContactsItem> contactItems) {
38+
public ContactOnlineAdapter(SqlSession sqlSession) {
3239
this.sqlSession = sqlSession;
40+
info = MainFrame.getContext().getCurrentPeer();
3341
contactsCacheMap = new HashMap<>();
34-
35-
3642
}
3743

3844
@Override
3945
public void notifyRecvSystemMessage(SystemCtrlMessageBean messageBean) {
4046
if(messageBean!=null&&messageBean.getContent()!=null&&messageBean.getMtype().equals(IPMTypes.online.name())){
4147
if(messageBean.getContent() instanceof OnlineMessage){
42-
IMPeersPanel peersPanel = IMPeersPanel.getContext();
43-
OnlineMessage onlineMessage = (OnlineMessage)messageBean.getContent();
48+
IMPeersPanel peersPanel = IMPeersPanel.getContext();
49+
OnlineMessage onlineMessage = (OnlineMessage)messageBean.getContent();
50+
if(info.getId().equals(onlineMessage.getId())){
51+
logger.info("收到自己的上线消息:{}",JSON.toJSONString(messageBean));
52+
return;
53+
}
54+
ContactsItem item = new ContactsItem();
55+
item.setFormid(messageBean.getFrom());
56+
item.setName(onlineMessage.getNick());
57+
item.setAvatar(onlineMessage.getAvatar());
58+
item.setAvatarSuffix(onlineMessage.getAvatarSuffix());
59+
item.setId(onlineMessage.getId());
60+
item.setIp(onlineMessage.getIp());
61+
item.setLocations(onlineMessage.getLocations());
62+
item.setOnline(1);
63+
boolean exists = false;
64+
int pos = findOrAddContacts(item,peersPanel.getContactItems(),exists);
65+
if(exists){
66+
peersPanel.getPeerlistView().notifyItemRangeInserted(pos,1);
67+
}else {
68+
peersPanel.getContactItems().sort(ContactsItem::compareTo);
69+
peersPanel.getPeerlistView().notifyDataSetChanged(false);
70+
peersPanel.getPeerlistView().setAutoScroll2Top();
71+
}
72+
}
73+
}
74+
}
4475

45-
ContactsItem item = new ContactsItem();
46-
item.setFormid(messageBean.getFrom());
47-
item.setName(onlineMessage.getNick());
48-
item.setAvatar(onlineMessage.getAvatar());
49-
item.setAvatarSuffix(onlineMessage.getAvatarSuffix());
50-
item.setId(onlineMessage.getId());
51-
item.setIp(onlineMessage.getIp());
52-
item.setLocations(onlineMessage.getLocations());
53-
item.setOnline(1);
54-
peersPanel.getContactItems().add(item);
55-
int size = peersPanel.getContactItems().size();
56-
peersPanel.getPeerlistView().notifyItemInserted(size-1,true);
57-
peersPanel.getPeerlistView().setAutoScrollToBottom();
58-
//存库TODO
76+
/**
77+
* -1 没变化
78+
* @param item
79+
* @param peerList
80+
* @return
81+
*/
82+
private int findOrAddContacts(ContactsItem item,List<ContactsItem> peerList,boolean exists){
83+
/**
84+
* 存库TODO
85+
* 刷新contacts
86+
* 异步刷新数据库
87+
*/
88+
inssetOrUpdateDB(item);
5989

60-
}
90+
if(peerList==null){
91+
peerList = new ArrayList<>();
92+
peerList.add(item);
93+
return 0;
6194
}
95+
int i=0;
96+
for(ContactsItem peer : peerList){
97+
if(peer.getFormid()!=null&&peer.getFormid().equals(item.getFormid())){
98+
exists = true;
99+
peer = item;
100+
return i;
101+
}
102+
i++;
103+
}
104+
peerList.add(item);
105+
return peerList.size()-1;
106+
}
107+
108+
/**
109+
* 独立线程处理
110+
* @param item
111+
*/
112+
private void inssetOrUpdateDB(ContactsItem item){
113+
//TODO
62114
}
63115

64116
/**
65117
* TODO 数据库中查找并缓存到MAP 供消息用
66-
* @param contactItems
118+
* @param item
67119
*/
68-
private void loadContactPeersMap(List<ContactsItem> contactItems){
120+
private void loadContactPeersMap(ContactsItem item,List<ContactsItem> peerList){
69121

70122
}
71123

@@ -74,4 +126,9 @@ private void updataCacheMap(ContactsItem item){
74126
contactsCacheMap.put(item.getFormid(),item);
75127
}
76128
}
129+
130+
@Override
131+
public void notifyRecvystemMessage(SystemCtrlMessageBean<OnlineMessage> ctrlMessageBean) {
132+
notifyRecvSystemMessage(ctrlMessageBean);
133+
}
77134
}

src/main/java/io/nbs/client/adapter/ContactsItemAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ public void onBindViewHolder(ContactsItemViewHolder viewHolder, int position) {
106106
ContactsItem item = contactsItems.get(position);
107107
String avatarFile = StringUtils.isBlank(item.getFormid()) ? item.getName() : item.getFormid();
108108
Image image;
109-
if(StringUtils.isNotBlank(item.getFormid())){
110-
image = AvatarUtil.createOrLoadUserAvatar(item.getFormid(),true,item.getAvatarSuffix());
109+
if(StringUtils.isNotBlank(item.getAvatar())){
110+
image = AvatarUtil.createOrLoadUserAvatar(item.getAvatar(),true,item.getAvatarSuffix());
111111
}else {
112112
image = AvatarUtil.createOrLoadUserAvatar(item.getName(),false,null);
113113
}

src/main/java/io/nbs/client/adapter/ReceiverMessageAdapter.java

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package io.nbs.client.adapter;
22

3+
import io.ipfs.api.IPFS;
34
import io.nbs.client.listener.IPFSSubscribeListener;
5+
import io.nbs.client.services.IpfsMessageSender;
46
import io.nbs.client.ui.components.NbsListView;
57
import io.nbs.client.ui.frames.MainFrame;
8+
import io.nbs.client.ui.panels.im.IMPeersPanel;
9+
import io.nbs.client.vo.ContactsItem;
10+
import io.nbs.commons.helper.ConfigurationHelper;
611
import io.nbs.sdk.beans.MessageItem;
712
import io.nbs.sdk.beans.PeerInfo;
813

@@ -30,21 +35,55 @@ public ReceiverMessageAdapter(List<MessageItem> items, NbsListView listView) {
3035
@Override
3136
public void notifyRecvMessage(MessageItem item) {
3237
PeerInfo peerInfo = MainFrame.getContext().getCurrentPeer();
38+
39+
3340
if(item.getFrom().equals(peerInfo.getFrom())){
34-
item.setMessageType(MessageItem.RIGHT_TEXT);
41+
//TODO 未来忽略自己发的
42+
/* item.setMessageType(MessageItem.RIGHT_TEXT);
3543
item.setId(peerInfo.getId());
3644
item.setSenderUsername(peerInfo.getNick());
37-
//TODO 未来忽略自己发的
45+
3846
items.add(item);
3947
listView.notifyItemInserted(items.size()-1,true);
40-
listView.setAutoScrollToBottom();
48+
listView.setAutoScrollToBottom();*/
4149
}else {
4250
item.setMessageType(MessageItem.LEFT_TEXT);
43-
//TODO
44-
// item.setId(peerInfo.getId());
45-
item.setSenderUsername(peerInfo.getNick());
46-
listView.notifyItemInserted(items.size()-1,true);
51+
item = findInPeerList(item);
52+
items.add(item);
53+
int postion = items.size()<=0 ? 0:items.size()-1;
54+
listView.notifyItemInserted(postion,true);
4755
listView.setAutoScrollToBottom();
56+
//TODO 存库
57+
58+
//autoRepaly(item.getSenderUsername());
59+
}
60+
}
61+
62+
private void autoRepaly(final String name){
63+
new Thread(()->{
64+
IpfsMessageSender sender = MainFrame.getContext().getMessageSender();
65+
String text = "你好"+name+"收到!";
66+
try {
67+
sender.ipfsSendMessage(text);
68+
} catch (Exception e) {
69+
e.printStackTrace();
70+
}
71+
}).start();
72+
73+
}
74+
private MessageItem findInPeerList(MessageItem item){
75+
List<ContactsItem> contactsItems = IMPeersPanel.getContext().getContactItems();
76+
77+
if(contactsItems==null||contactsItems.size()==0)return item;
78+
for(ContactsItem contactsItem : contactsItems ){
79+
if(contactsItem.getFormid()!=null&&contactsItem.getFormid().equals(item.getFrom())){
80+
item.setSenderId(contactsItem.getId());
81+
item.setSenderUsername(contactsItem.getName());
82+
item.setAvatar(contactsItem.getAvatar());
83+
return item;
84+
}
4885
}
86+
item.setSenderUsername("unkonw_peerid");
87+
return item;
4988
}
5089
}

src/main/java/io/nbs/client/cnsts/AppGlobalCnst.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public class AppGlobalCnst {
3030
*/
3131
public static String TOOL_ICON_PATH = "/icons/tools/";
3232

33+
/**
34+
* 非NBS客户端区分
35+
*/
36+
public static String NOTNBS_PEER_MIDDLE= "_NBSChain_";
3337

3438
/**
3539
* 构造路径

src/main/java/io/nbs/client/listener/OnlineNotifier.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.nbs.client.listener;
22

3+
import io.nbs.sdk.beans.OnlineMessage;
34
import io.nbs.sdk.beans.SystemCtrlMessageBean;
45

56
/**
@@ -16,4 +17,6 @@ public interface OnlineNotifier {
1617
* @param messageBean
1718
*/
1819
void notifyRecvSystemMessage(SystemCtrlMessageBean messageBean);
20+
21+
void notifyRecvystemMessage(SystemCtrlMessageBean<OnlineMessage> ctrlMessageBean);
1922
}

src/main/java/io/nbs/client/services/IpfsMessageReceiver.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
import com.alibaba.fastjson.JSON;
44
import io.ipfs.api.IPFS;
55
import io.ipfs.api.exceptions.IllegalIPFSMessageException;
6-
import io.ipfs.multibase.Base16;
76
import io.nbs.client.Launcher;
87
import io.nbs.client.listener.IPFSSubscribeListener;
98
import io.nbs.client.listener.OnlineNotifier;
10-
import io.nbs.client.ui.frames.MainFrame;
119
import io.nbs.client.ui.panels.im.ChatPanel;
1210
import io.nbs.commons.helper.ConfigurationHelper;
13-
import io.nbs.commons.utils.Base64CodecUtil;
11+
1412
import io.nbs.sdk.beans.*;
1513
import io.nbs.sdk.prot.IPMParser;
1614
import io.nbs.sdk.prot.IPMTypes;
@@ -19,8 +17,7 @@
1917

2018
import java.io.IOException;
2119
import java.io.UnsupportedEncodingException;
22-
import java.net.URL;
23-
import java.net.URLDecoder;
20+
2421
import java.util.ArrayList;
2522
import java.util.Collections;
2623
import java.util.List;
@@ -49,11 +46,9 @@ public class IpfsMessageReceiver{
4946
boolean ctrlSign = true;
5047
private static boolean runing = false;
5148

52-
public IpfsMessageReceiver(IPFSSubscribeListener subscribeListener,OnlineNotifier onlineNotifier) {
53-
this.subscribeListener = subscribeListener;
49+
public IpfsMessageReceiver() {
5450
worldTopic = IpfsMessageSender.NBSWORLD_IMS_TOPIC;
5551
ipfs = new IPFS(ConfigurationHelper.getInstance().getIPFSAddress());
56-
onlineNotifier = onlineNotifier;
5752
}
5853

5954
public void startReceiver(){
@@ -108,7 +103,7 @@ public void startReceiver(){
108103
* @param jsonMessages
109104
*/
110105
private void proccessMessage(List<String> jsonMessages){
111-
// new Thread(()->{
106+
new Thread(()->{
112107
for(String json: jsonMessages){
113108
logger.info("处理消息....");
114109
StandardIPFSMessage standardIPFSMessage = null;
@@ -133,27 +128,29 @@ private void proccessMessage(List<String> jsonMessages){
133128
PeerInfo info =Launcher.currentPeer;
134129
logger.info("{}<=====>{}",info.getId(),item.getFrom());
135130

136-
if(item.getFrom().equals(info.getFrom())){
131+
/* if(item.getFrom().equals(info.getFrom())){
137132
138133
}else {
139134
item.setMessageType(1);
140135
ChatPanel.getContext().addMessageItemToEnd(item);
141-
}
136+
}*/
142137

143-
//subscribeListener.notifyRecvMessage(item);
138+
subscribeListener.notifyRecvMessage(item);
144139
}
145140
if(standardIPFSMessage.getMtype().equals(IPMTypes.online.name())){
146141
try {
147142
SystemCtrlMessageBean<OnlineMessage> ctrlMessageBean = IPMParser.convertOnlineMessage(standardIPFSMessage);
148-
if(ctrlMessageBean==null||onlineNotifier==null)continue;
149-
onlineNotifier.notifyRecvSystemMessage(ctrlMessageBean);
143+
if(ctrlMessageBean==null||onlineNotifier==null){
144+
continue;
145+
}
146+
onlineNotifier.notifyRecvystemMessage(ctrlMessageBean);
150147
} catch (IllegalIPFSMessageException e) {
151148
logger.warn("消息JSON :{}解析失败,忽略.",json);
152149
continue;
153150
}
154151
}
155152
}
156-
//}).start();
153+
}).start();
157154
}
158155

159156
public void stopRecived(){

src/main/java/io/nbs/client/services/IpfsMessageSender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public IpfsMessageSender(IPFS ipfs) {
4747
*/
4848
public String sendOnline(OnlineMessage message) throws Exception {
4949
String encodeData = IPMParser.encode(message,IPMTypes.online);
50-
logger.info(NBSWORLD_IMS_TOPIC);
50+
logger.info("NBS Client 发送上线消息{}:{}",NBSWORLD_IMS_TOPIC,encodeData);
5151
ipfs.pubsub.pub(NBSWORLD_IMS_TOPIC,encodeData);
5252
return encodeData;
5353
}

src/main/java/io/nbs/client/services/PeerServiceImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.nbs.biz.data.entity.PeerContactsEntity;
44
import com.nbs.biz.service.PeerContactsService;
5+
import io.nbs.client.cnsts.AppGlobalCnst;
56
import io.nbs.client.vo.ContactsItem;
67
import io.ipfs.api.IPFS;
78
import io.ipfs.api.JSONParser;
@@ -54,6 +55,10 @@ public List<ContactsItem> loadPeers(Boolean filterNoFrom){
5455
//return init4Test(25);
5556
}
5657

58+
/**
59+
*
60+
* @return
61+
*/
5762
private List<ContactsItem> mergeContacts(){
5863
List<ContactsItem> contactsItems = new ArrayList<>();
5964
List<String> onlinePeers = getOnlinePeers();
@@ -89,8 +94,9 @@ private List<ContactsItem> mergeContacts(){
8994

9095
private ContactsItem constructionItemByPeerId(String peerId){
9196
ContactsItem itemOnlyId = new ContactsItem();
92-
String nickTemp = peerId.substring(2,6)+"..."+ peerId.substring(peerId.length()-4);
97+
String nickTemp = peerId.substring(2,6)+AppGlobalCnst.NOTNBS_PEER_MIDDLE + peerId.substring(peerId.length()-4);
9398
itemOnlyId.setId(peerId);
99+
itemOnlyId.setOnline(1);
94100
itemOnlyId.setName(nickTemp);
95101
return itemOnlyId;
96102
}

0 commit comments

Comments
 (0)