106f6ba60Sopenharmony_ci/* 206f6ba60Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. 306f6ba60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 406f6ba60Sopenharmony_ci * you may not use this file except in compliance with the License. 506f6ba60Sopenharmony_ci * You may obtain a copy of the License at 606f6ba60Sopenharmony_ci * 706f6ba60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 806f6ba60Sopenharmony_ci * 906f6ba60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1006f6ba60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1106f6ba60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1206f6ba60Sopenharmony_ci * See the License for the specific language governing permissions and 1306f6ba60Sopenharmony_ci * limitations under the License. 1406f6ba60Sopenharmony_ci */ 1506f6ba60Sopenharmony_ci 1606f6ba60Sopenharmony_ci#include "client_map.h" 1706f6ba60Sopenharmony_ci#include <cstdio> 1806f6ba60Sopenharmony_ci#include <sys/socket.h> 1906f6ba60Sopenharmony_ci#include <sys/un.h> 2006f6ba60Sopenharmony_ci#include <unistd.h> 2106f6ba60Sopenharmony_ci#include "logging.h" 2206f6ba60Sopenharmony_ci 2306f6ba60Sopenharmony_ciClientMap& ClientMap::GetInstance() 2406f6ba60Sopenharmony_ci{ 2506f6ba60Sopenharmony_ci static ClientMap instance; 2606f6ba60Sopenharmony_ci return instance; 2706f6ba60Sopenharmony_ci} 2806f6ba60Sopenharmony_ci 2906f6ba60Sopenharmony_ciClientMap::ClientMap() {} 3006f6ba60Sopenharmony_ci 3106f6ba60Sopenharmony_ciClientMap::~ClientMap() {} 3206f6ba60Sopenharmony_ci 3306f6ba60Sopenharmony_ciint ClientMap::PutClientSocket(int socketFileDescriptor, ServiceEntry& p) 3406f6ba60Sopenharmony_ci{ 3506f6ba60Sopenharmony_ci if (socketClients_.find(socketFileDescriptor) == socketClients_.end()) { 3606f6ba60Sopenharmony_ci socketClients_[socketFileDescriptor] = std::make_shared<ClientConnection>(socketFileDescriptor, p); 3706f6ba60Sopenharmony_ci return 1; 3806f6ba60Sopenharmony_ci } 3906f6ba60Sopenharmony_ci return -1; 4006f6ba60Sopenharmony_ci} 4106f6ba60Sopenharmony_ci 4206f6ba60Sopenharmony_ciint ClientMap::ClearClientSocket() 4306f6ba60Sopenharmony_ci{ 4406f6ba60Sopenharmony_ci socketClients_.clear(); 4506f6ba60Sopenharmony_ci return 0; 4606f6ba60Sopenharmony_ci} 4706f6ba60Sopenharmony_ci 4806f6ba60Sopenharmony_ciint ClientMap::AutoRelease() 4906f6ba60Sopenharmony_ci{ 5006f6ba60Sopenharmony_ci for (auto iter = socketClients_.begin(); iter != socketClients_.end(); ++iter) { 5106f6ba60Sopenharmony_ci auto p = iter->second; 5206f6ba60Sopenharmony_ci switch (p->GetClientState()) { 5306f6ba60Sopenharmony_ci case CLIENT_STAT_WORKING: 5406f6ba60Sopenharmony_ci break; 5506f6ba60Sopenharmony_ci case CLIENT_STAT_WAIT_THREAD_EXIT: 5606f6ba60Sopenharmony_ci break; 5706f6ba60Sopenharmony_ci case CLIENT_STAT_THREAD_EXITED: 5806f6ba60Sopenharmony_ci PROFILER_LOG_INFO(LOG_CORE, "AutoRelease release %d", iter->first); 5906f6ba60Sopenharmony_ci socketClients_.erase(iter->first); 6006f6ba60Sopenharmony_ci return 1; 6106f6ba60Sopenharmony_ci break; 6206f6ba60Sopenharmony_ci default: 6306f6ba60Sopenharmony_ci break; 6406f6ba60Sopenharmony_ci } 6506f6ba60Sopenharmony_ci } 6606f6ba60Sopenharmony_ci return 1; 6706f6ba60Sopenharmony_ci} 68