package com.cmvr.edge.client.manage;

import io.grpc.stub.StreamObserver;
import java.util.concurrent.ConcurrentHashMap;

/**
 * GRPC流管理器，用于管理GRPC双向流
 * 提供添加、获取和移除流的方法，保证在多线程环境下的安全性
 */
public class GrpcStreamManager {
    // 存储流观察者的并发哈希映射，确保线程安全
    private static final ConcurrentHashMap<String, StreamObserver<?>> observers = new ConcurrentHashMap<>();

    /**
     * 添加或更新指定键的流观察者
     * 如果该键已经存在，则不进行替换
     *
     * @param key           流的唯一键
     * @param responseObserver 流的观察者
     */
    public static void addStream(String key, StreamObserver<?> responseObserver) {
       observers.putIfAbsent(key, responseObserver);
    }

    /**
     * 获取指定键的流观察者
     *
     * @param key 流的唯一键
     * @return 对应键的流观察者，如果不存在则返回null
     */
    public static StreamObserver<?> getStream(String key) {
        return observers.get(key);
    }

    /**
     * 移除指定键的流观察者
     *
     * @param key 流的唯一键
     * @return 被移除的流观察者，如果不存在则返回null
     */
    public static StreamObserver<?> removeStream(String key) {
        return observers.remove(key);
    }

    /**
     * 检查是否包含指定的键
     *
     * @param key 要检查的键
     * @return 如果包含返回true，否则返回false
     */
    public static boolean containsKey(String key) {
        return observers.containsKey(key);
    }

}
