# Java - Multi chat client - server socket
@Daniel Daniel Jun 10, 2021 0:00
## Đồ án chat (Java)
---
### Table of content
1. [Introduction](#introduction)
2. [Main Content](#main-content)
1. [Các chức năng có trong gợi ý của yêu cầu bài tập](#requirements)
2. [Các chức năng khác (hoặc tương tự)](#addition)
3. [Chi tiết bài tập](#details)
1. [Tổng quan](#general)
2. [Cấu trúc](#structure)
3. [Cách cài đặt và chạy chương trình](#setup)
4. [Các nguồn tham khảo](#references)
---
### Content
- <p id="introduction">Introduction</p>
- Họ tên: Bùi Tiến Đức
- MSSV: 20424016
> Bài tập phần lớn được xây dựng lại và tìm hiểu ở mức độ cơ bản thông qua các nguồn chia sẻ. Do java không phải là thế mạnh của em nên mong thầy/cô xem xét ạ.
- <p id="main-content">Main Content</p>
1. <p id="requirements">Các chức năng có trong gợi ý của yêu cầu bài tập</p>
- [ ] Đăng ký tài khoản
- [ ] Đăng nhập với tài khoản đã đăng ký
- [x] Chat
- [x] Chat có emoji
- [x] Chat cùng lúc với nhiều người (mở nhiều cửa sổ)
- [ ] Chat group
- [x] Gửi file và nhận file
- [x] Gửi hình và nhận hình
- [ ] Voice chat
- [ ] Webcam
2. <p id="addition">Các chức năng khác (hoặc tương tự)</p>
- Đăng ký username trong session hiện tại (nghĩa là khi khởi động client, sẽ được chọn 1 username duy nhất để
tham gia chat)
- Xem danh sách các users đang online
- Thông báo người dùng muốn kết nối/đã thoát khỏi phiên trò chuyện
3. <p id="details">Chi tiết bài tập</p>
1. <p id="general">Tổng quan:</p>
- Sử dụng giao thức TCP để truyền nhận dữ liệu.
2. <p id="structure">Cấu trúc</p>
- client: Xử lý logic và UI của client
- data: Tạo các đối tượng file hoặc thông tin user để gửi đi
- image: Gồm các hình ảnh, icon được sử dụng trong ứng dụng
- login: Xử lý tạo user để tham gia cuộc trò chuyện
- server: Xử lý, quản lý các users đăng nhập vào hệ thống
- transformer: Xử lý việc giải mã các thông tin truyền nhận và ghi log
- DB: Không sử dụng
3. <p id="setup">Cách cài đặt và chạy chương trình</p>
- Trong trường hợp sử dụng IDE Idea IntelliJ
- Chọn `File` > `Project Structure` > `Artifacts`

- Sau đó bấm dấu cộng (`+`) để thêm các tùy chọn. `JAR` > `From modules with dependencies`

- Bấm `Browse` tại `Main Class` để chọn class.

- Bấm `Ok` để xác nhận thêm class.

- Sau đó đổi tên cho thư mục chứa file jar (dựa trên tên class tương ứng)

- Làm tương tự với các class còn lại.

- Sau đó chọn Meta cho từng class. Bấm vào từng class, chọn file `*.jar` sẽ hiển thị như hình dưới.

- Chọn `Manifest File` . Vào các thư mục `META-INF` trong từng thư mục tương ứng để chọn. Các class khác
tương tự.

- Chọn `Ok` để hoàn tất việc thiết lập, trên thanh công cụ, chọn thẻ `Build` > `All artifacts` > `Build`

- Lúc này, trên cây thư mục sẽ xuất hiện tệp `artifacts` trong `out` và các thư mục chứa file `jar` đã
chọn

- Có thể click phải chuột vào file `jar` chọn `Run ...` hoặc double click trong Explorer của máy để chạy
chương trình
- Nếu sử dụng hệ điều hành Linux, cần cho phép quyền của file trước khi chạy
- Click phải chuột vào file `Server*.jar` > `Permissions` > `Allow executing file as program` . Làm
tương tự với file `Login*.jar`

- Khởi động Server. Mở file `Server*.jar` > `Start`

- Tạo 1 user với username và host mặc định là `localhost`, port `8080` . Chạy file `Login*.jar` > nhập
username > `Login`

- Xuất hiện dashboard gồm tên user và danh sách người dùng online

- Mở thêm 1 cửa sổ Login khác để tạo thêm user. Lúc này 2 cửa sổ sẽ hiện tên những người online. Chọn
vào tên người dùng và chọn `Chat` và làm theo các bước để bắt đầu chat

- Sau đó khung chat sẽ hiển thị và có thể gửi các tin nhắn dạng văn bản, icon, các loại file.

- Có thể mở thêm nhiều user khác và thực hiện chat tương tự.
4. <p id="references">Các nguồn tham khảo</p>
- [https://github.com/toanbku/java-socket-chat?fbclid=IwAR1tMcdVXFHVSfSY-v0k6uIW_MoKzTF0to3n5JJmgB-fRLeJiCMxnezOYS0](https://github.com/toanbku/java-socket-chat?fbclid=IwAR1tMcdVXFHVSfSY-v0k6uIW_MoKzTF0to3n5JJmgB-fRLeJiCMxnezOYS0)