✅ 1. 채팅 처리 로직
📤 클라이언트 → 서버: 채팅 보내기
void sendChatMessage(const QString& from, const QString& to, const QString& message) {
QJsonObject data;
data["from"] = from;
data["to"] = to;
data["message"] = message;
QJsonObject request;
request["action"] = "chat_send";
request["data"] = data;
QJsonDocument doc(request);
QByteArray msg = doc.toJson(QJsonDocument::Compact) + "\n";
SocketManager::instance()->socket()->write(msg);
}
📥 서버 → 클라이언트: 채팅 수신 처리
SocketManager의 jsonReceived 신호에 연결해서 처리:
connect(SocketManager::instance(), &SocketManager::jsonReceived, this, [=](QJsonObject json){
if (json["action"].toString() == "chat_receive") {
QJsonObject data = json["data"].toObject();
QString from = data["from"].toString();
QString message = data["message"].toString();
QString time = data["sent_time"].toString(); // 시간은 서버에서 옵션으로 줄 수 있음
ui->chatTextBrowser->append(QString("[%1] %2").arg(from, message));
}
});
✅ 2. 주문 처리 로직
📤 클라이언트 → 서버: 주문 생성 요청
void sendOrder(const QString& user_id, const QString& store_id, const QJsonArray& items) {
QJsonObject data;
data["customer_id"] = user_id;
data["store_id"] = store_id;
data["items"] = items;
data["address"] = "서울시 예시구 예시로 123"; // 사용자 주소
QJsonObject request;
request["action"] = "create_order";
request["data"] = data;
QJsonDocument doc(request);
QByteArray msg = doc.toJson(QJsonDocument::Compact) + "\n";
SocketManager::instance()->socket()->write(msg);
}
📌 예시 items 형식
QJsonArray items;
QJsonObject item1;
item1["menu_id"] = 1001;
item1["name"] = "치킨마요";
item1["qty"] = 2;
items.append(item1);
QJsonObject item2;
item2["menu_id"] = 1005;
item2["name"] = "콜라";
item2["qty"] = 1;
items.append(item2);
📥 서버 → 클라이언트: 주문 결과 수신
connect(SocketManager::instance(), &SocketManager::jsonReceived, this, [=](QJsonObject json){
QString action = json["action"].toString();
if (action == "order_result") {
QJsonObject data = json["data"].toObject();
QString status = data["status"].toString();
QString orderId = data["order_id"].toString();
if (status == "success") {
QMessageBox::information(this, "주문 완료", "주문번호: " + orderId);
} else {
QMessageBox::warning(this, "주문 실패", "사유: " + data["message"].toString());
}
}
});
order_result 형태로 응답하도록 서버와 합의해야 함.
- SocketManager::sendJson(QJsonObject) 함수 만들어두면 편리함
✅ 확장 가능한 예시들
- "get_order_status" 요청 → 주문 상태 추적
- "request_dispatch" → 라이더 배차 신청
- "start_delivery" → 배달 시작 시각 기록