private async Task SendChatMessageAsync(string roomId, GameChat.MessageType type, string Message)
        {
            GameChat.ChatMessage chat_msg = new GameChat.ChatMessage()
            {
                RoomId      = roomId,
                Message     = Message,
                MessageType = type,
            };

            var msg = JsonConvert.SerializeObject(chat_msg);
            await Cache.Instance.GetSubscriber().PublishAsync($"room:{roomId}", msg);
        }
        public override async Task JoinRoom(GameChat.JoinRoomRequest request, IServerStreamWriter <GameChat.ChatMessage> responseStream, ServerCallContext context)
        {
            var reply1 = new GameChat.ChatMessage()
            {
                Code    = GameChat.ErrorCode.Success,
                RoomId  = request.RoomId,
                Message = "welcome join",
            };

            await responseStream.WriteAsync(reply1);

            await WaitRoomAsync(request.RoomId, responseStream, context);
        }
        public override async Task CreateRoom(GameChat.CreateRoomRequest request, IServerStreamWriter <GameChat.ChatMessage> responseStream, ServerCallContext context)
        {
            var roomId = Guid.NewGuid().ToString();

            var reply1 = new GameChat.ChatMessage()
            {
                Code    = GameChat.ErrorCode.Success,
                RoomId  = roomId,
                Message = "welcome",
            };

            await Cache.Instance.GetDatabase().SortedSetAddAsync($"room_z", roomId, DateTime.UtcNow.ToEpochTime());

            await Cache.Instance.GetDatabase().StringSetAsync($"room_info:{roomId}", request.RoomName);


            await responseStream.WriteAsync(reply1);


            await WaitRoomAsync(roomId, responseStream, context);
        }