Javaのカリキュラムのデザイン(シングル) - チャットアプリケーション

関与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。

由于时间紧迫,很多功能没有实现,后续功能有时间会完成,这是一个长期支持的项目

おすすめ

転載: www.cnblogs.com/1814-com/p/12174116.html