Skip to content

Commit 9c5592a

Browse files
committed
增加启动登录广播
1 parent 159cae3 commit 9c5592a

File tree

14 files changed

+469
-31
lines changed

14 files changed

+469
-31
lines changed

profile/.merkle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
#add Monica.mp3
2-
#Sat Jun 23 00:06:32 CST 2018
1+
#add \u5FAE\u4FE1\u56FE\u7247_20180608230516.jpg
2+
#Sun Jun 24 22:47:18 CST 2018
33
QmQD445aW3Ge6bgD6Lv9RJG48WfveAMgXket15GYsuysYb=nbs.rp
44
QmdNQYHjg2d6PKsXu5DSRWJHPUgSMVqWttAAp3bqaHq2Z8=Girls-Gee-\u300Aoh\u300B.mp3
5+
QmWuoJzhZkMjEe9ybfFeaSn6jDzTgvPd6UkC6RLZUbZVyf=NBS.jpg
56
Qmc5QhR1WeUhGW12tT3WND3qxfLRmnci1PYjogjGy56X3n=Monica.mp3
67
QmfK5QwVKDod3Bwjdmcgyf1qGxEzmGayfSSFTcv4BxxRXR=nbs.rp
78
QmW4dKs2KXqCWc9TQXzSc41HTNBPtFJJf7crwSbLGkQmVa=nbs64.png

src/main/java/UI/AppMainWindow.java

Lines changed: 144 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,33 @@
66
import UI.panel.im.IMPanel;
77
import UI.panel.setting.SettingPanel;
88
import com.alibaba.fastjson.JSON;
9+
import com.nbs.entity.ContactsItem;
910
import com.nbs.entity.PeerBoradcastInfo;
1011
import com.nbs.ipfs.IPFSHelper;
12+
import com.nbs.ipfs.entity.IpfsMessage;
1113
import com.nbs.tools.ConfigHelper;
1214
import com.nbs.utils.Base64CodecUtil;
1315
import io.ipfs.api.IPFS;
16+
import io.ipfs.api.JSONParser;
1417
import io.ipfs.api.MerkleNode;
1518
import io.ipfs.api.NamedStreamable;
19+
import io.ipfs.multihash.Multihash;
1620
import org.apache.commons.lang3.StringUtils;
1721
import org.slf4j.Logger;
1822
import org.slf4j.LoggerFactory;
1923

2024
import javax.swing.*;
2125
import java.awt.*;
2226
import java.io.File;
27+
import java.io.FileOutputStream;
2328
import java.io.IOException;
29+
import java.util.HashMap;
30+
import java.util.List;
2431
import java.util.Map;
2532
import java.util.Properties;
33+
import java.util.concurrent.TimeUnit;
34+
import java.util.stream.Collectors;
35+
import java.util.stream.Stream;
2636

2737
/**
2838
* @Package : UI
@@ -43,6 +53,8 @@ public class AppMainWindow {
4353
*/
4454
private static final Logger logger = LoggerFactory.getLogger(AppMainWindow.class);
4555

56+
private static boolean boradcastSuccess = false;
57+
4658
public static JFrame frame;
4759
/**
4860
* 主窗口
@@ -73,16 +85,8 @@ public class AppMainWindow {
7385
*/
7486
public static IPFS ipfs = IPFSHelper.getInstance().getIpfs();
7587

76-
7788
public static String PROFILE_NICKNAME = "";
7889

79-
/**
80-
*
81-
*/
82-
public static String NBS_FILES_ROOT_PATH ;
83-
84-
public static String NBS_FILES_IPFS_ROOT;
85-
8690
/**
8791
*
8892
*/
@@ -91,6 +95,10 @@ public class AppMainWindow {
9195
* 关于面板
9296
*/
9397
public static AboutPanel aboutPanel;
98+
/**
99+
* 联系人缓存
100+
*/
101+
public static Map<String,ContactsItem> peerItems = new HashMap<>();
94102

95103
public static void main(String[] args){
96104

@@ -123,6 +131,7 @@ public void run() {
123131
public AppMainWindow(){
124132
initialize();
125133
broadcastOnline();
134+
subSelf(400);
126135
}
127136
/**
128137
* 初始化frame内容
@@ -195,9 +204,11 @@ private void loadEnv(){
195204
logger.info(k+"="+v);
196205
}
197206
logger.info("ENV ============================<<");
198-
NBS_FILES_ROOT_PATH = ConfigHelper.CURRENT_DIR +File.separator+ ConfigHelper.getNbsFilesRoot()+File.separator;
199-
NBS_FILES_IPFS_ROOT = NBS_FILES_ROOT_PATH +"ipfs" + File.separator;
200-
File ipfsDir = new File(NBS_FILES_IPFS_ROOT);
207+
/**
208+
*
209+
*/
210+
211+
File ipfsDir = new File(ConfigHelper.NBS_FILES_IPFS_ROOT);
201212
if(ipfsDir.isDirectory()&& !ipfsDir.exists()){
202213
ipfsDir.mkdirs();
203214
}
@@ -286,18 +297,131 @@ public void initAvatar(){
286297
}
287298

288299
/**
289-
*
300+
* 上线广播
290301
*/
291302
private void broadcastOnline(){
292-
if(self==null)return;
293-
String ctrlMsg = Base64CodecUtil.encodeCtrlMsg(self,Base64CodecUtil.CtrlTypes.online);
303+
if(boradcastSuccess)return;
304+
new Thread(new Runnable() {
305+
@Override
306+
public void run() {
307+
try {
308+
if(self==null||self.getNick()==null){
309+
TimeUnit.SECONDS.sleep(30);
310+
broadcastOnline();
311+
}else {
312+
String ctrlMsg = Base64CodecUtil.encodeCtrlMsg(self,Base64CodecUtil.CtrlTypes.online);
313+
logger.info("Send CTRL MSG : "+ctrlMsg);
314+
ipfs.pubsub.pub(IPFSHelper.NBSWORLD_CTRL_TOPIC,ctrlMsg);
315+
logger.info(IPFSHelper.NBSWORLD_CTRL_TOPIC+"Send CTRL MSG : "+ctrlMsg);
316+
boradcastSuccess = true;
317+
}
318+
} catch (InterruptedException e) {
319+
broadcastOnline();
320+
} catch (Exception e) {
321+
logger.info(e.getMessage());
322+
broadcastOnline();
323+
}
324+
}
325+
}).start();
326+
}
294327

295-
try {
296-
logger.info("Send CTRL MSG : "+ctrlMsg);
297-
ipfs.pubsub.pub(IPFSHelper.NBSWORLD_CTRL_TOPIC,ctrlMsg);
298-
logger.info(IPFSHelper.NBSWORLD_CTRL_TOPIC+"Send CTRL MSG : "+ctrlMsg);
299-
} catch (Exception e) {
300-
e.printStackTrace();
328+
/**
329+
* See yourself
330+
*/
331+
private void subSelf(long sleepTimes){
332+
new Thread(new Runnable() {
333+
@Override
334+
public void run() {
335+
try {
336+
if(StringUtils.isBlank(PEER_ID)){
337+
TimeUnit.SECONDS.sleep(30);
338+
}
339+
if(sleepTimes>0l){ TimeUnit.MILLISECONDS.sleep(sleepTimes); }
340+
logger.info("SUB SEFL :"+self.getId());
341+
Stream<Map<String,Object>> sub = ipfs.pubsub.sub(self.getId());
342+
List<Map> lst = sub.limit(1).collect(Collectors.toList());
343+
String json = JSONParser.toString(lst.get(0));
344+
logger.info(System.currentTimeMillis()+"-revc : "+json);
345+
IpfsMessage message = JSON.parseObject(json,IpfsMessage.class);
346+
//TODO 处理
347+
updateContactsCache(message);
348+
subSelf(sleepTimes);
349+
} catch (Exception e) {
350+
e.printStackTrace();
351+
logger.info(e.getMessage());
352+
subSelf(sleepTimes);
353+
}
354+
}
355+
}).start();
356+
}
357+
358+
public void updateContactsCache(IpfsMessage m){
359+
if(m==null)return;
360+
m = Base64CodecUtil.parseIpmsMessageCtrlType(m);
361+
switch (m.getTypes()){
362+
case online:
363+
364+
//更新缓存
365+
updatePeerItem(m);
366+
break;
367+
default:
368+
break;
369+
}
370+
}
371+
372+
public void updatePeerItem (IpfsMessage m){
373+
logger.info(m.getContents());
374+
PeerBoradcastInfo info = JSON.parseObject(m.getContents(),PeerBoradcastInfo.class);
375+
ContactsItem item = null;
376+
if(info.getId().equals(self.getId())){
377+
//自己不处理
378+
return;
379+
}
380+
if(peerItems.containsKey(info.getId())){
381+
item = peerItems.get(info.getId());
382+
item.setFormid(m.getFrom());
383+
if(info.getAvatarHash()!=null)item.setAvatar(info.getAvatarHash());
384+
if(info.getAvatarSuffix()!=null)item.setAvatarSuffix(info.getAvatarSuffix());
385+
item.setName(info.getNick());
386+
}else {
387+
item = new ContactsItem(info.getId(),info.getNick(),m.getFrom());
388+
item.setAvatar(info.getAvatarHash());
389+
item.setAvatarSuffix(info.getAvatarSuffix());
390+
peerItems.put(info.getId(),item);
301391
}
392+
safeAndFreshIM(item);
393+
}
394+
395+
/**
396+
* 启用新线程下载头像,并存储
397+
* @param item
398+
*/
399+
private void safeAndFreshIM(ContactsItem item){
400+
//TODO 通知
401+
new Thread(new Runnable() {
402+
@Override
403+
public void run() {
404+
//TODO save sqlite
405+
String headRootPath = ConfigHelper.NBS_CACHE_AVATAR_ROOT_PATH;
406+
try {
407+
if(StringUtils.isNotBlank(item.getAvatar())){
408+
FileOutputStream fos ;
409+
File headImage = new File(headRootPath,item.getAvatar()+item.getAvatarSuffix());
410+
if(headImage.exists()){
411+
headImage.delete();
412+
}
413+
headImage.createNewFile();
414+
Multihash multihash = Multihash.fromBase58(item.getAvatar());
415+
byte[] bytes = ipfs.get(multihash);
416+
fos = new FileOutputStream(headImage);
417+
fos.write(bytes);
418+
fos.flush();
419+
fos.close();
420+
}
421+
} catch (IOException e) {
422+
e.printStackTrace();
423+
}
424+
}
425+
}).start();
302426
}
303427
}

src/main/java/UI/panel/im/IMPanel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ private JPanel buildMessMainPanel(){
154154
messPanel = new WihteBackJPanel();
155155
messPanel.setLayout(new BorderLayout());
156156
int downHeight = 116;
157-
int upHeight = ConstantsUI.MAIN_WINDOW_HEIGHT -downHeight-4;
157+
int upHeight = ConstantsUI.MAIN_WINDOW_HEIGHT -downHeight-24;
158158

159159
/**
160160
* 上部
@@ -287,4 +287,5 @@ public void contactsItemChanged(ContactsItem item){
287287
public static IMPanel getContext() {
288288
return context;
289289
}
290+
290291
}

src/main/java/com/nbs/entity/ContactsItem.java

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.nbs.entity;
22

3+
import com.nbs.utils.Base64CodecUtil;
34
import com.nbs.utils.CharacterParser;
45

56
/**
@@ -20,17 +21,52 @@ public class ContactsItem implements Comparable<ContactsItem> {
2021

2122
private String type;
2223

24+
private String formid;
25+
/**
26+
*
27+
*/
28+
private String avatar;
29+
30+
private String avatarSuffix;
31+
2332
public ContactsItem() { }
2433

34+
/**
35+
*
36+
* @param id
37+
* @param name
38+
*/
2539
public ContactsItem(String id, String name) {
2640
this.id = id;
2741
this.name = name;
42+
this.type = TYPE.P.toString();
43+
}
44+
45+
/**
46+
*
47+
* @param id
48+
* @param name
49+
* @param formid
50+
*/
51+
public ContactsItem(String id, String name, String formid) {
52+
this.id = id;
53+
this.name = name;
54+
this.formid = formid;
55+
this.type = TYPE.P.toString();
2856
}
2957

30-
public ContactsItem(String id, String name, String type) {
58+
/**
59+
*
60+
* @param id
61+
* @param name
62+
* @param formid
63+
* @param type
64+
*/
65+
public ContactsItem(String id, String name,String formid, String type ) {
3166
this.id = id;
3267
this.name = name;
3368
this.type = type;
69+
this.formid = formid;
3470
}
3571

3672
public String getId() {
@@ -77,6 +113,30 @@ public int compareTo(ContactsItem o) {
77113
return 0==r ? this.id.compareTo(o.getId()) : r;
78114
}
79115

116+
public String getFormid() {
117+
return formid;
118+
}
119+
120+
public void setFormid(String formid) {
121+
this.formid = formid;
122+
}
123+
124+
public String getAvatar() {
125+
return avatar;
126+
}
127+
128+
public void setAvatar(String avatar) {
129+
this.avatar = avatar;
130+
}
131+
132+
public String getAvatarSuffix() {
133+
return avatarSuffix;
134+
}
135+
136+
public void setAvatarSuffix(String avatarSuffix) {
137+
this.avatarSuffix = avatarSuffix;
138+
}
139+
80140
/**
81141
*
82142
*/

src/main/java/com/nbs/entity/PeerBoradcastInfo.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,25 @@ public class PeerBoradcastInfo {
1515
private String avatarHash;
1616
private String avatarSuffix;
1717

18+
/**
19+
*
20+
* @param id
21+
* @param nick
22+
* @param avatarHash
23+
* @param avatarSuffix
24+
*/
1825
public PeerBoradcastInfo(String id, String nick, String avatarHash, String avatarSuffix) {
1926
this.id = id;
2027
this.nick = nick;
2128
this.avatarHash = avatarHash;
2229
this.avatarSuffix = avatarSuffix;
2330
}
2431

32+
/**
33+
*
34+
* @param id
35+
* @param nick
36+
*/
2537
public PeerBoradcastInfo(String id, String nick) {
2638
this.id = id;
2739
this.nick = nick;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.nbs.ipfs;
2+
3+
/**
4+
* @Package : com.nbs.ipfs
5+
* @Description : <p></p>
6+
* @Author : lambor.c
7+
* @Date : 2018/6/24-22:36
8+
* Copyright (c) 2018, NBS , lambor.c<[email protected]>.
9+
* All rights reserved.
10+
*/
11+
public class NBSPmessageHelper {
12+
13+
14+
}

0 commit comments

Comments
 (0)