関与1.プロジェクト、
用户打开应用,登录成功后进入主界面,有聊天和联系人分页,可以群聊和私聊。
技術への対応:
ネッティー
JavaFXの
MyBatisの
春ブーツ
いるProtobuf
mysqlの
2.プロジェクトgitのアドレス
サーバー:https://gitee.com/ltm77/chatserver
クライアント:https://gitee.com/ltm77/chatclient
レコードのスクリーンショットをコミットgitの3プロジェクト
4.アイテム・ファンクション・チャート、メインパッケージ図
5.プロジェクトの実行ショット
6.プロジェクトの重要なコード
最後のニュース配信サービス
public void userOrderDispatch(ChannelHandlerContext ctx, UserOrder.OrderMessage msg){
UserOrder.OrderMessage.OrderType orderType=msg.getOrderType();
switch (orderType){
case UserLoginType:
userLoginTypeHandler(ctx,msg);
break;
case AddConversationType:
addConversationHandler(ctx,msg);
break;
case SendPersonalChatMessageType:
sendPersonalChatMessageHandler(ctx,msg);
break;
case SendGroupChatMessageType:
sendSendGroupChatMessageHandler(ctx,msg);
break;
case RemoveConversationType:
removeConversationHandler(ctx,msg);
break;
default:
}
}
メッセージを転送するためにプライベートチャットサーバー
public void sendPersonalChatMessage(UserOrder.SendPersonalChatMessage sendPersonalChatMessage){
String account = sendPersonalChatMessage.getAccount();
String linkmanAccount = sendPersonalChatMessage.getLinkmanAccount();
UserEntiny.PersonalChatMessage personalChatMessage = sendPersonalChatMessage.getPersonalChatMessage();
String messageContent = personalChatMessage.getMessageContent();
long timeStamp = personalChatMessage.getTimeStamp();
//需要插入两个聊天记录,一个是发送者的记录,一个是接收者的记录
PersonalChatMessage personalChatMessageTemp = new PersonalChatMessage();
personalChatMessageTemp.setMessageContent(messageContent);
personalChatMessageTemp.setSign(1);
personalChatMessageTemp.setTimeStamp(timeStamp);
userServer.insertPersonalChatMessage(personalChatMessageTemp,account,linkmanAccount);
personalChatMessageTemp.setSign(2);
userServer.insertPersonalChatMessage(personalChatMessageTemp,linkmanAccount,account);
Channel linkmanAccountChannel = nettyOnlineServer.findUser(linkmanAccount);
if(linkmanAccountChannel!=null){
UserEntiny.PersonalChatMessage.Builder p=UserEntiny.PersonalChatMessage.newBuilder()
.setTimeStamp(timeStamp)
.setMessageContent(messageContent)
.setMessageFlag(1)
.setSign(2)
.setId(personalChatMessageTemp.getId());
UserOrder.SendPersonalChatMessage.Builder s = UserOrder.SendPersonalChatMessage.newBuilder()
.setAccount(account)
.setPersonalChatMessage(p)
.setLinkmanAccount(linkmanAccount);
UserOrder.OrderMessage.Builder orderMessage = UserOrder.OrderMessage.newBuilder();
orderMessage.setOrderType(UserOrder.OrderMessage.OrderType.SendPersonalChatMessageType)
.setSendPersonalChatMessage(s);
linkmanAccountChannel.writeAndFlush(orderMessage.build());
System.out.println("转发消息成功");
}
else {
userServer.insertConversation(linkmanAccount,2,"0",account);
userServer.insertPersonalConversation(linkmanAccount,account);
userServer.insertPersonalUnreadMessage(1,account,linkmanAccount,personalChatMessageTemp.getId());
}
}
削除クライアントのセッションイベント
void removeConversation(ActionEvent event) {
UserOrderServer userOrderServer = (UserOrderServer) SpringContextUtil.getBean("userOrderServer");
User currentUser = (User) SpringContextUtil.getBean("currentUser");
Conversation conversation = conversationJFXListView.getSelectionModel().getSelectedItem();
if (conversation == null) return;
int type = conversation.getType();
String groupAccount = "0";
String linkmanAccount = "0";
if (type == 1) {
groupAccount = conversation.getGroupConversation().getCurrentChatGroup().getGroupAccount();
} else {
linkmanAccount = conversation.getPersonalConversation().getCurrentLinkman().getAccount();
}
ObservableList conversationObservableList = (ObservableList) SpringContextUtil.getBean("conversationObservableList");
conversationObservableList.remove(conversation);
conversationJFXListView.getSelectionModel().clearSelection();
setCurrentConversation(null);
userOrderServer.removeConversation(currentUser.getAccount(), type, groupAccount, linkmanAccount);
}
7.アイテム・コードのスキャン結果と修正
大部分警告是命名不规范和if没有大括号,注解没有使用正确
改善の余地はまだ8。
由于时间紧迫,很多功能没有实现,后续功能有时间会完成,这是一个长期支持的项目