1231. 2025. 2. 25. 16:07
from flask import Flask, request, jsonify
from queue import Queue
import threading
import time

app = Flask(__name__)
message_queues = {}  # 클라이언트별 메시지 큐
clients = set()  # 연결된 클라이언트 목록

@app.route('/register', methods=['POST'])
def register_client():
    client_id = request.get_json()['client_id']
    if client_id not in message_queues:
        message_queues[client_id] = Queue()
        clients.add(client_id)
    return jsonify({"status": "success"})

@app.route('/send', methods=['POST'])
def send_message():
    try:
        data = request.get_json()
        sender_id = data['sender_id']
        encrypted_message = data['message']
        
        # 서버는 메시지를 복호화하지 않고 그대로 전달
        # 클라이언트 ID만 추가
        message_with_sender = {
            "sender_id": sender_id,
            "encrypted_message": encrypted_message
        }
        
        # 다른 모든 클라이언트에게 메시지 전달
        for client_id in clients:
            if client_id != sender_id:
                message_queues[client_id].put(message_with_sender)
        
        return jsonify({"status": "success"})
    except Exception as e:
        return jsonify({"status": "error", "message": str(e)}), 400

@app.route('/receive', methods=['POST'])
def receive_messages():
    client_id = request.get_json()['client_id']
    if client_id in message_queues:
        messages = []
        while not message_queues[client_id].empty():
            messages.append(message_queues[client_id].get())
        return jsonify({"messages": messages})
    return jsonify({"messages": []})

@app.route('/unregister', methods=['POST'])
def unregister_client():
    client_id = request.get_json()['client_id']
    if client_id in clients:
        clients.remove(client_id)
        del message_queues[client_id]
    return jsonify({"status": "success"})

if __name__ == '__main__':
    app.run(debug=True, port=5000)