add better line editing capability to ws connect, thanks to linenoise-cpp
This commit is contained in:
parent
8319dbb56a
commit
ca9d59c1c1
44
third_party/cpp-linenoise/.gitignore
vendored
Normal file
44
third_party/cpp-linenoise/.gitignore
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
|
# Others
|
||||||
|
*.dSYM
|
||||||
|
*.swp
|
||||||
|
Debug
|
||||||
|
Release
|
||||||
|
*.suo
|
||||||
|
*.sdf
|
||||||
|
*.user
|
||||||
|
xcuserdata
|
||||||
|
*.xcworkspace
|
||||||
|
Makefile
|
||||||
|
CMakeFiles
|
||||||
|
CMakeCache.txt
|
||||||
|
*.cmake
|
||||||
|
history.txt
|
22
third_party/cpp-linenoise/LICENSE
vendored
Normal file
22
third_party/cpp-linenoise/LICENSE
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2015 yhirose
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
95
third_party/cpp-linenoise/README.md
vendored
Normal file
95
third_party/cpp-linenoise/README.md
vendored
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
cpp-linenoise
|
||||||
|
=============
|
||||||
|
|
||||||
|
Multi-platfrom (Unix, Windows) C++ header-only linenoise-based readline library.
|
||||||
|
|
||||||
|
This library gathered code from following excellent libraries, clean it up, and put it into a C++ header file for convenience.
|
||||||
|
|
||||||
|
* `linenoise.h` and `linenose.c` ([antirez/linenoise](https://github.com/antirez/linenoise))
|
||||||
|
* `ANSI.c` ([adoxa/ansicon](https://github.com/adoxa/ansicon))
|
||||||
|
* `Win32_ANSI.h` and `Win32_ANSI.c` ([MSOpenTech/redis](https://github.com/MSOpenTech/redis))
|
||||||
|
|
||||||
|
The licenses for the libraries are included in `linenoise.hpp`.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
```c++
|
||||||
|
#include "linenoise.hpp"
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
const auto path = "history.txt";
|
||||||
|
|
||||||
|
// Setup completion words every time when a user types
|
||||||
|
linenoise::SetCompletionCallback([](const char* editBuffer, std::vector<std::string>& completions) {
|
||||||
|
if (editBuffer[0] == 'h') {
|
||||||
|
completions.push_back("hello");
|
||||||
|
completions.push_back("hello there");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Enable the multi-line mode
|
||||||
|
linenoise::SetMultiLine(true);
|
||||||
|
|
||||||
|
// Set max length of the history
|
||||||
|
linenoise::SetHistoryMaxLen(4);
|
||||||
|
|
||||||
|
// Load history
|
||||||
|
linenoise::LoadHistory(path);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
// Read line
|
||||||
|
std::string line;
|
||||||
|
auto quit = linenoise::Readline("hello> ", line);
|
||||||
|
|
||||||
|
if (quit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << "echo: '" << line << "'" << endl;
|
||||||
|
|
||||||
|
// Add text to history
|
||||||
|
linenoise::AddHistory(line.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save history
|
||||||
|
linenoise::SaveHistory(path);
|
||||||
|
```
|
||||||
|
|
||||||
|
API
|
||||||
|
---
|
||||||
|
|
||||||
|
```c++
|
||||||
|
namespace linenoise;
|
||||||
|
|
||||||
|
std::string Readline(const char* prompt);
|
||||||
|
|
||||||
|
void SetMultiLine(bool multiLineMode);
|
||||||
|
|
||||||
|
typedef std::function<void (const char* editBuffer, std::vector<std::string>& completions)> CompletionCallback;
|
||||||
|
|
||||||
|
void SetCompletionCallback(CompletionCallback fn);
|
||||||
|
|
||||||
|
bool SetHistoryMaxLen(size_t len);
|
||||||
|
|
||||||
|
bool LoadHistory(const char* path);
|
||||||
|
|
||||||
|
bool SaveHistory(const char* path);
|
||||||
|
|
||||||
|
bool AddHistory(const char* line);
|
||||||
|
|
||||||
|
const std::vector<std::string>& GetHistory();
|
||||||
|
```
|
||||||
|
|
||||||
|
Tested compilers
|
||||||
|
----------------
|
||||||
|
|
||||||
|
* Visual Studio 2015
|
||||||
|
* Clang 3.5
|
||||||
|
* GCC 6.3.1
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
BSD license (© 2015 Yuji Hirose)
|
5
third_party/cpp-linenoise/example/CMakeLists.txt
vendored
Normal file
5
third_party/cpp-linenoise/example/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
include_directories(.)
|
||||||
|
add_definitions("-std=c++1y")
|
||||||
|
|
||||||
|
add_executable(example example.cpp)
|
54
third_party/cpp-linenoise/example/example.cpp
vendored
Normal file
54
third_party/cpp-linenoise/example/example.cpp
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include "../linenoise.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main(int argc, const char** argv)
|
||||||
|
{
|
||||||
|
const auto path = "history.txt";
|
||||||
|
|
||||||
|
// Enable the multi-line mode
|
||||||
|
linenoise::SetMultiLine(true);
|
||||||
|
|
||||||
|
// Set max length of the history
|
||||||
|
linenoise::SetHistoryMaxLen(4);
|
||||||
|
|
||||||
|
// Setup completion words every time when a user types
|
||||||
|
linenoise::SetCompletionCallback([](const char* editBuffer, std::vector<std::string>& completions) {
|
||||||
|
if (editBuffer[0] == 'h') {
|
||||||
|
#ifdef _WIN32
|
||||||
|
completions.push_back("hello こんにちは");
|
||||||
|
completions.push_back("hello こんにちは there");
|
||||||
|
#else
|
||||||
|
completions.push_back("hello");
|
||||||
|
completions.push_back("hello there");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load history
|
||||||
|
linenoise::LoadHistory(path);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
std::string line;
|
||||||
|
#ifdef _WIN32
|
||||||
|
auto quit = linenoise::Readline("hello> ", line);
|
||||||
|
#else
|
||||||
|
auto quit = linenoise::Readline("\033[32mこんにちは\x1b[0m> ", line);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (quit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << "echo: '" << line << "'" << endl;
|
||||||
|
|
||||||
|
// Add line to history
|
||||||
|
linenoise::AddHistory(line.c_str());
|
||||||
|
|
||||||
|
// Save history
|
||||||
|
linenoise::SaveHistory(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
28
third_party/cpp-linenoise/example/example.sln
vendored
Normal file
28
third_party/cpp-linenoise/example/example.sln
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 14
|
||||||
|
VisualStudioVersion = 14.0.23107.0
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcxproj", "{563BF990-4217-439F-92A4-F8A285052772}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Release|x64.Build.0 = Release|x64
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{563BF990-4217-439F-92A4-F8A285052772}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
153
third_party/cpp-linenoise/example/example.vcxproj
vendored
Normal file
153
third_party/cpp-linenoise/example/example.vcxproj
vendored
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{563BF990-4217-439F-92A4-F8A285052772}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>example</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="example.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\linenoise.hpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
2421
third_party/cpp-linenoise/linenoise.hpp
vendored
Normal file
2421
third_party/cpp-linenoise/linenoise.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -23,6 +23,7 @@ include_directories(ws ..)
|
|||||||
include_directories(ws ../third_party)
|
include_directories(ws ../third_party)
|
||||||
include_directories(ws ../third_party/statsd-client-cpp/src)
|
include_directories(ws ../third_party/statsd-client-cpp/src)
|
||||||
include_directories(ws ../third_party/spdlog/include)
|
include_directories(ws ../third_party/spdlog/include)
|
||||||
|
include_directories(ws ../third_party/cpp-linenoise)
|
||||||
include_directories(ws snake)
|
include_directories(ws snake)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
#include <ixwebsocket/IXWebSocket.h>
|
#include <ixwebsocket/IXWebSocket.h>
|
||||||
#include <ixwebsocket/IXSocket.h>
|
#include <ixwebsocket/IXSocket.h>
|
||||||
|
|
||||||
|
#include "linenoise.hpp"
|
||||||
|
|
||||||
|
|
||||||
namespace ix
|
namespace ix
|
||||||
{
|
{
|
||||||
class WebSocketConnect
|
class WebSocketConnect
|
||||||
@ -148,30 +151,33 @@ namespace ix
|
|||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
std::string text;
|
// Read line
|
||||||
std::cout << "> " << std::flush;
|
std::string line;
|
||||||
std::getline(std::cin, text);
|
auto quit = linenoise::Readline("> ", line);
|
||||||
|
|
||||||
if (text == "/stop")
|
if (quit)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line == "/stop")
|
||||||
{
|
{
|
||||||
std::cout << "Stopping connection..." << std::endl;
|
std::cout << "Stopping connection..." << std::endl;
|
||||||
webSocketChat.stop();
|
webSocketChat.stop();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/start")
|
if (line == "/start")
|
||||||
{
|
{
|
||||||
std::cout << "Starting connection..." << std::endl;
|
std::cout << "Starting connection..." << std::endl;
|
||||||
webSocketChat.start();
|
webSocketChat.start();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!std::cin)
|
webSocketChat.sendMessage(line);
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
webSocketChat.sendMessage(text);
|
// Add text to history
|
||||||
|
linenoise::AddHistory(line.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user