first commit
This commit is contained in:
9
third_party/socket.io-client-cpp/examples/Console/CMakeLists.txt
vendored
Normal file
9
third_party/socket.io-client-cpp/examples/Console/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
|
||||
find_package(Threads REQUIRED)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)
|
||||
add_executable(sio_console_demo main.cpp)
|
||||
target_link_libraries(sio_console_demo sioclient)
|
||||
target_link_libraries(sio_console_demo Threads::Threads)
|
||||
target_compile_features(sio_console_demo PRIVATE cxx_std_11)
|
||||
message(STATUS ${Boost_INCLUDE_DIRS} )
|
||||
#target_include_directories(sio_console_demo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${Boost_INCLUDE_DIRS} )
|
||||
28
third_party/socket.io-client-cpp/examples/Console/README.md
vendored
Normal file
28
third_party/socket.io-client-cpp/examples/Console/README.md
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#SioChatDemo setup
|
||||
This Demo is create with `Visual Studio 2012 Update 4` , It is a simple console app, connect to official [socket.io chatroom example](https://github.com/Automattic/socket.io/tree/master/examples/chat) as a chat client.
|
||||
|
||||
You can choose a nickname, send/receive message in the chat room, and see join/left information as well.
|
||||
##boost for windows
|
||||
Please download boost package from [boost.org](www.boost.org), and unpack to `boost` folder.
|
||||
Please make sure there's no redundent folder levels under it (by check if `bootstrap.bat` is directly under `boost` folder).
|
||||
|
||||
cd to `boost` folder, and run `bootstrap.bat`
|
||||
|
||||
Then run:
|
||||
|
||||
```shell
|
||||
bjam stage --toolset=msvc --with-system --with-date_time --with-random --stagedir="release" link=static runtime-link=shared threading=multi release
|
||||
bjam stage --toolset=msvc --with-system --with-date_time --with-random --stagedir="debug" link=static runtime-link=shared threading=multi debug
|
||||
```
|
||||
After done this, use Visual studio command line tool, go to `boost\release` folder, run
|
||||
|
||||
```shell
|
||||
lib.exe /OUT:boost.lib *
|
||||
```
|
||||
|
||||
And do then same thing in `boost\debug` folder.
|
||||
|
||||
then you can open the VS project `SioChatDemo.sln` to build and run.
|
||||
|
||||
##Visual studio version
|
||||
Microsoft start to support c++11 after `Visual studio 2012 Update 4`. Please make sure you're using up-to-date version.
|
||||
20
third_party/socket.io-client-cpp/examples/Console/SioChatDemo/SioChatDemo.sln
vendored
Normal file
20
third_party/socket.io-client-cpp/examples/Console/SioChatDemo/SioChatDemo.sln
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SioChatDemo", "SioChatDemo.vcxproj", "{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
101
third_party/socket.io-client-cpp/examples/Console/SioChatDemo/SioChatDemo.vcxproj
vendored
Normal file
101
third_party/socket.io-client-cpp/examples/Console/SioChatDemo/SioChatDemo.vcxproj
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.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>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{3503FCEB-2C8E-441A-A57C-B9DEE9171CF4}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>SioChatDemo</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v110</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v110</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</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>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>D:\BoostRoot\include\boost-1_55;$(SolutionDir)..\..\..\lib\websocketpp;$(SolutionDir)..\..\..\lib\rapidjson\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>D:\boost_1_55_0\boost_build\debug\lib;$(SolutionDir)boost\$(Configuration)\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(SolutionDir)boost;$(SolutionDir)..\..\..\lib\websocketpp;$(SolutionDir)..\..\..\lib\rapidjson\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(SolutionDir)boost\$(Configuration)\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>boost.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>boost.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\src\internal\sio_client_impl.h" />
|
||||
<ClInclude Include="..\..\..\src\internal\sio_packet.h" />
|
||||
<ClInclude Include="..\..\..\src\sio_client.h" />
|
||||
<ClInclude Include="..\..\..\src\sio_message.h" />
|
||||
<ClInclude Include="..\..\..\src\sio_socket.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\src\internal\sio_client_impl.cpp" />
|
||||
<ClCompile Include="..\..\..\src\internal\sio_packet.cpp" />
|
||||
<ClCompile Include="..\..\..\src\sio_client.cpp" />
|
||||
<ClCompile Include="..\..\..\src\sio_socket.cpp" />
|
||||
<ClCompile Include="..\main.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
188
third_party/socket.io-client-cpp/examples/Console/main.cpp
vendored
Normal file
188
third_party/socket.io-client-cpp/examples/Console/main.cpp
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
//
|
||||
// sio_test_sample.cpp
|
||||
//
|
||||
// Created by Melo Yao on 3/24/15.
|
||||
//
|
||||
|
||||
#include "../../src/sio_client.h"
|
||||
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#include <condition_variable>
|
||||
#include <string>
|
||||
#ifdef WIN32
|
||||
#define HIGHLIGHT(__O__) std::cout<<__O__<<std::endl
|
||||
#define EM(__O__) std::cout<<__O__<<std::endl
|
||||
|
||||
#include <stdio.h>
|
||||
#include <tchar.h>
|
||||
#define MAIN_FUNC int _tmain(int argc, _TCHAR* argv[])
|
||||
#else
|
||||
#define HIGHLIGHT(__O__) std::cout<<"\e[1;31m"<<__O__<<"\e[0m"<<std::endl
|
||||
#define EM(__O__) std::cout<<"\e[1;30;1m"<<__O__<<"\e[0m"<<std::endl
|
||||
|
||||
#define MAIN_FUNC int main(int argc ,const char* args[])
|
||||
#endif
|
||||
|
||||
using namespace sio;
|
||||
using namespace std;
|
||||
std::mutex _lock;
|
||||
|
||||
std::condition_variable_any _cond;
|
||||
bool connect_finish = false;
|
||||
|
||||
class connection_listener
|
||||
{
|
||||
sio::client &handler;
|
||||
|
||||
public:
|
||||
|
||||
connection_listener(sio::client& h):
|
||||
handler(h)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void on_connected()
|
||||
{
|
||||
_lock.lock();
|
||||
_cond.notify_all();
|
||||
connect_finish = true;
|
||||
_lock.unlock();
|
||||
}
|
||||
void on_close(client::close_reason const& reason)
|
||||
{
|
||||
std::cout<<"sio closed "<<std::endl;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void on_fail()
|
||||
{
|
||||
std::cout<<"sio failed "<<std::endl;
|
||||
exit(0);
|
||||
}
|
||||
};
|
||||
|
||||
int participants = -1;
|
||||
|
||||
socket::ptr current_socket;
|
||||
|
||||
void bind_events()
|
||||
{
|
||||
current_socket->on("new message", sio::socket::event_listener_aux([&](string const& name, message::ptr const& data, bool isAck,message::list &ack_resp)
|
||||
{
|
||||
_lock.lock();
|
||||
string user = data->get_map()["username"]->get_string();
|
||||
string message = data->get_map()["message"]->get_string();
|
||||
EM(user<<":"<<message);
|
||||
_lock.unlock();
|
||||
}));
|
||||
|
||||
current_socket->on("user joined",sio::socket::event_listener_aux([&](string const& name, message::ptr const& data, bool isAck,message::list &ack_resp)
|
||||
{
|
||||
_lock.lock();
|
||||
string user = data->get_map()["username"]->get_string();
|
||||
participants = data->get_map()["numUsers"]->get_int();
|
||||
bool plural = participants !=1;
|
||||
|
||||
// abc "
|
||||
HIGHLIGHT(user<<" joined"<<"\nthere"<<(plural?" are ":"'s ")<< participants<<(plural?" participants":" participant"));
|
||||
_lock.unlock();
|
||||
}));
|
||||
current_socket->on("user left", sio::socket::event_listener_aux([&](string const& name, message::ptr const& data, bool isAck,message::list &ack_resp)
|
||||
{
|
||||
_lock.lock();
|
||||
string user = data->get_map()["username"]->get_string();
|
||||
participants = data->get_map()["numUsers"]->get_int();
|
||||
bool plural = participants !=1;
|
||||
HIGHLIGHT(user<<" left"<<"\nthere"<<(plural?" are ":"'s ")<< participants<<(plural?" participants":" participant"));
|
||||
_lock.unlock();
|
||||
}));
|
||||
}
|
||||
|
||||
MAIN_FUNC
|
||||
{
|
||||
|
||||
sio::client h;
|
||||
connection_listener l(h);
|
||||
|
||||
h.set_open_listener(std::bind(&connection_listener::on_connected, &l));
|
||||
h.set_close_listener(std::bind(&connection_listener::on_close, &l,std::placeholders::_1));
|
||||
h.set_fail_listener(std::bind(&connection_listener::on_fail, &l));
|
||||
h.connect("http://127.0.0.1:3000");
|
||||
_lock.lock();
|
||||
if(!connect_finish)
|
||||
{
|
||||
_cond.wait(_lock);
|
||||
}
|
||||
_lock.unlock();
|
||||
current_socket = h.socket();
|
||||
Login:
|
||||
string nickname;
|
||||
while (nickname.length() == 0) {
|
||||
HIGHLIGHT("Type your nickname:");
|
||||
|
||||
getline(cin, nickname);
|
||||
}
|
||||
current_socket->on("login", sio::socket::event_listener_aux([&](string const& name, message::ptr const& data, bool isAck,message::list &ack_resp){
|
||||
_lock.lock();
|
||||
participants = data->get_map()["numUsers"]->get_int();
|
||||
bool plural = participants !=1;
|
||||
HIGHLIGHT("Welcome to Socket.IO Chat-\nthere"<<(plural?" are ":"'s ")<< participants<<(plural?" participants":" participant"));
|
||||
_cond.notify_all();
|
||||
_lock.unlock();
|
||||
current_socket->off("login");
|
||||
}));
|
||||
current_socket->emit("add user", nickname);
|
||||
_lock.lock();
|
||||
if (participants<0) {
|
||||
_cond.wait(_lock);
|
||||
}
|
||||
_lock.unlock();
|
||||
bind_events();
|
||||
|
||||
HIGHLIGHT("Start to chat,commands:\n'$exit' : exit chat\n'$nsp <namespace>' : change namespace");
|
||||
for (std::string line; std::getline(std::cin, line);) {
|
||||
if(line.length()>0)
|
||||
{
|
||||
if(line == "$exit")
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(line.length() > 5&&line.substr(0,5) == "$nsp ")
|
||||
{
|
||||
string new_nsp = line.substr(5);
|
||||
if(new_nsp == current_socket->get_namespace())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
current_socket->off_all();
|
||||
current_socket->off_error();
|
||||
//per socket.io, default nsp should never been closed.
|
||||
if(current_socket->get_namespace() != "/")
|
||||
{
|
||||
current_socket->close();
|
||||
}
|
||||
current_socket = h.socket(new_nsp);
|
||||
bind_events();
|
||||
//if change to default nsp, we do not need to login again (since it is not closed).
|
||||
if(current_socket->get_namespace() == "/")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
goto Login;
|
||||
}
|
||||
current_socket->emit("new message", line);
|
||||
_lock.lock();
|
||||
EM("\t\t\t"<<line<<":"<<"You");
|
||||
_lock.unlock();
|
||||
}
|
||||
}
|
||||
HIGHLIGHT("Closing...");
|
||||
h.sync_close();
|
||||
h.clear_con_listeners();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user