Ghi chú kỹ thuật
Phân tích chuyên sâu về kiến trúc peer-to-peer, thiết kế transport và mật mã học của PlainApp — trực tiếp từ mã nguồn.
DLNA Cast: Xây dựng Bộ Gửi và Bộ Nhận UPnP Từ Đầu
Cách PlainApp triển khai DLNA/UPnP AV casting ở cả hai phía: quét và điều khiển TV qua SOAP với vai trò bộ gửi, và biến chính chiếc điện thoại thành một UPnP MediaRenderer với vai trò bộ nhận — bao gồm SSDP discovery, DIDL-Lite metadata, media serving với Range request, GENA event callback, và mô hình tin cậy allow/deny dựa trên IP người gửi, tất cả bằng Kotlin Multiplatform thuần.
Screen Mirror: Kiến trúc Casting độ trễ thấp
Bài viết này trình bày thiết kế end-to-end của hệ thống screen mirror trên PlainApp: cách Android capture và mã hóa phần cứng H.264/Opus qua MediaCodec, cách các frame di chuyển qua WebSocket bằng giao thức nhị phân tùy chỉnh, cách phía web giải mã bằng WebCodecs và render qua WebGL2 với zero CPU copies, cách xử lý loss detection, xoay màn hình và remote touch control, cũng như cách đồng bộ vòng đời MediaProjection.
PlainApp Bảo mật: phân tích chuyên sâu
PlainApp bảo vệ dữ liệu của bạn trên Wi-Fi nội bộ như thế nào — với bằng chứng từ mã nguồn mở.
Thiết kế tầng vận chuyển Wi-Fi Aware — Khám phá láng giềng và các đường dẫn dữ liệu
Bài viết này giải thích cách PlainApp sử dụng Wi-Fi Aware (NAN — Neighbor Awareness Networking) làm tầng trung gian trong chuỗi dự phòng của tầng vận chuyển peer, nằm giữa LAN (HTTPS cùng subnet) và BLE (GATT RPC phương án cuối). Wi-Fi Aware giúp hai thiết bị PlainApp giao tiếp được với nhau khi ở các SSID khác nhau, VLAN khách với IoT, hoặc không có cơ sở hạ tầng Wi-Fi nào — mà không cần địa chỉ IP từ máy chủ DHCP.
Thiết kế tầng vận chuyển BLE — Tin nhắn và tải tệp xuống
Bài viết này trình bày cách PlainApp đẩy tin nhắn trò chuyện và tải tệp xuống qua Bluetooth Low Energy khi cả LAN lẫn Wi-Fi Aware đều không khả dụng. BLE là tầng dự phòng được đảm bảo: chậm, nhưng hoạt động mà không cần bất kỳ kết nối IP nào. Bài viết đề cập đến định dạng đường truyền, thiết kế phân khối hai lớp, cách lưu lượng đồng thời được (và không được) ưu tiên, và lý do mỗi kết nối đều bị hủy bỏ sau mỗi yêu cầu.
Kiến trúc Chat Peer & Channel
Bài viết này giải thích cách chat ưu tiên ngoại tuyến của PlainApp hoạt động đầu cuối: cách một tin nhắn đi từ một cú chạm trong giao diện UI đến một thiết bị khác qua tầng vận chuyển peer, cách các kênh nhóm phân phát tin nhắn đến nhiều thành viên, và cách hệ thống giữ được khả năng chịu lỗi khi mạng biến mất. Quá trình pairing (việc thiết lập tin cậy và trao đổi khóa để khởi tạo hai thiết bị) được đề cập đến trong bài viết Pairing Flow riêng biệt.
Luồng ghép nối
Bài viết này giải thích cách hai thiết bị PlainApp thiết lập niềm tin lần đầu tiên — cách chúng khám phá lẫn nhau, trao đổi khóa, và đi đến khóa vận chuyển ChaCha20 chung dùng để mã hóa mọi tin nhắn trò chuyện, truyền tệp và tín hiệu trạng thái hiện diện sau đó. Kiến trúc trò chuyện và kênh tiêu thụ khóa này được trình bày riêng trong bài viết Kiến trúc Trò chuyện.