1e509ee18Sopenharmony_ci/* 2e509ee18Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3e509ee18Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e509ee18Sopenharmony_ci * you may not use this file except in compliance with the License. 5e509ee18Sopenharmony_ci * You may obtain a copy of the License at 6e509ee18Sopenharmony_ci * 7e509ee18Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e509ee18Sopenharmony_ci * 9e509ee18Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e509ee18Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e509ee18Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e509ee18Sopenharmony_ci * See the License for the specific language governing permissions and 13e509ee18Sopenharmony_ci * limitations under the License. 14e509ee18Sopenharmony_ci */ 15e509ee18Sopenharmony_ci 16e509ee18Sopenharmony_ci#ifndef ECMASCRIPT_TOOLING_CLIENT_TCPSERVER_H 17e509ee18Sopenharmony_ci#define ECMASCRIPT_TOOLING_CLIENT_TCPSERVER_H 18e509ee18Sopenharmony_ci 19e509ee18Sopenharmony_ci#include <algorithm> 20e509ee18Sopenharmony_ci#include <arpa/inet.h> 21e509ee18Sopenharmony_ci#include <cstring> 22e509ee18Sopenharmony_ci#include <iostream> 23e509ee18Sopenharmony_ci#include <mutex> 24e509ee18Sopenharmony_ci#include <pthread.h> 25e509ee18Sopenharmony_ci#include <securec.h> 26e509ee18Sopenharmony_ci#include <sstream> 27e509ee18Sopenharmony_ci#include <stdio.h> 28e509ee18Sopenharmony_ci#include <stdlib.h> 29e509ee18Sopenharmony_ci#include <string.h> 30e509ee18Sopenharmony_ci#include <thread> 31e509ee18Sopenharmony_ci#include <unistd.h> 32e509ee18Sopenharmony_ci#include <uv.h> 33e509ee18Sopenharmony_ci#include <vector> 34e509ee18Sopenharmony_ci 35e509ee18Sopenharmony_ci#include "arkcompiler/toolchain/common/log_wrapper.h" 36e509ee18Sopenharmony_ci 37e509ee18Sopenharmony_cinamespace OHOS::ArkCompiler::Toolchain { 38e509ee18Sopenharmony_ciextern uv_async_t* g_inputSignal; 39e509ee18Sopenharmony_ciextern uv_async_t* g_releaseHandle; 40e509ee18Sopenharmony_ciclass TcpServer { 41e509ee18Sopenharmony_cipublic: 42e509ee18Sopenharmony_ci static TcpServer& getInstance() 43e509ee18Sopenharmony_ci { 44e509ee18Sopenharmony_ci static TcpServer instance; 45e509ee18Sopenharmony_ci return instance; 46e509ee18Sopenharmony_ci } 47e509ee18Sopenharmony_ci 48e509ee18Sopenharmony_ci int CreateTcpServer([[maybe_unused]] void* arg); 49e509ee18Sopenharmony_ci void StartTcpServer([[maybe_unused]] void* arg); 50e509ee18Sopenharmony_ci void TcpServerWrite(std::string msg = "inner"); 51e509ee18Sopenharmony_ci bool IsServerActive() const 52e509ee18Sopenharmony_ci { 53e509ee18Sopenharmony_ci return isServerActive; 54e509ee18Sopenharmony_ci } 55e509ee18Sopenharmony_ci 56e509ee18Sopenharmony_ci void SetServerState(const bool state) 57e509ee18Sopenharmony_ci { 58e509ee18Sopenharmony_ci isServerActive = state; 59e509ee18Sopenharmony_ci } 60e509ee18Sopenharmony_ci 61e509ee18Sopenharmony_ciprivate: 62e509ee18Sopenharmony_ci TcpServer() = default; 63e509ee18Sopenharmony_ci TcpServer(const TcpServer&) = delete; 64e509ee18Sopenharmony_ci TcpServer& operator=(const TcpServer&) = delete; 65e509ee18Sopenharmony_ci 66e509ee18Sopenharmony_ci void SendCommand(std::string inputStr); 67e509ee18Sopenharmony_ci void CloseServer(); 68e509ee18Sopenharmony_ci void ServerConnect(); 69e509ee18Sopenharmony_ci bool FindCommand(std::vector<std::string> cmds, std::string cmd); 70e509ee18Sopenharmony_ci 71e509ee18Sopenharmony_ci uv_thread_t serverTid_ = 0; 72e509ee18Sopenharmony_ci bool isServerActive = false; 73e509ee18Sopenharmony_ci int lfd = -1; 74e509ee18Sopenharmony_ci int cfd = -1; 75e509ee18Sopenharmony_ci}; 76e509ee18Sopenharmony_ci} // namespace OHOS::ArkCompiler::Toolchain 77e509ee18Sopenharmony_ci#endif // ECMASCRIPT_TOOLING_CLIENT_TCPSERVER_H