add new broadcast server example
This commit is contained in:
		
							
								
								
									
										9
									
								
								examples/broadcast_server/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								examples/broadcast_server/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					CMakeCache.txt
 | 
				
			||||||
 | 
					package-lock.json
 | 
				
			||||||
 | 
					CMakeFiles		
 | 
				
			||||||
 | 
					ixwebsocket_unittest	
 | 
				
			||||||
 | 
					cmake_install.cmake	
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					ixwebsocket
 | 
				
			||||||
 | 
					Makefile
 | 
				
			||||||
 | 
					build
 | 
				
			||||||
							
								
								
									
										30
									
								
								examples/broadcast_server/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								examples/broadcast_server/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Author: Benjamin Sergeant
 | 
				
			||||||
 | 
					# Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cmake_minimum_required (VERSION 3.4.1)
 | 
				
			||||||
 | 
					project (broadcast_server)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# There's -Weverything too for clang
 | 
				
			||||||
 | 
					set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wshorten-64-to-32")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set (OPENSSL_PREFIX /usr/local/opt/openssl) # Homebrew openssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set (CMAKE_CXX_STANDARD 11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option(USE_TLS "Add TLS support" ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_subdirectory(${PROJECT_SOURCE_DIR}/../.. ixwebsocket)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include_directories(broadcast_server .)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_executable(broadcast_server 
 | 
				
			||||||
 | 
					  broadcast_server.cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (APPLE AND USE_TLS)
 | 
				
			||||||
 | 
					    target_link_libraries(broadcast_server "-framework foundation" "-framework security")
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_link_libraries(broadcast_server ixwebsocket)
 | 
				
			||||||
 | 
					install(TARGETS broadcast_server DESTINATION bin)
 | 
				
			||||||
							
								
								
									
										73
									
								
								examples/broadcast_server/broadcast_server.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								examples/broadcast_server/broadcast_server.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *  broadcast_server.cpp
 | 
				
			||||||
 | 
					 *  Author: Benjamin Sergeant
 | 
				
			||||||
 | 
					 *  Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <sstream>
 | 
				
			||||||
 | 
					#include <ixwebsocket/IXWebSocketServer.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char** argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int port = 8080;
 | 
				
			||||||
 | 
					    if (argc == 2)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::stringstream ss;
 | 
				
			||||||
 | 
					        ss << argv[1];
 | 
				
			||||||
 | 
					        ss >> port;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ix::WebSocketServer server(port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    server.setOnConnectionCallback(
 | 
				
			||||||
 | 
					        [&server](std::shared_ptr<ix::WebSocket> webSocket)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            webSocket->setOnMessageCallback(
 | 
				
			||||||
 | 
					                [webSocket, &server](ix::WebSocketMessageType messageType,
 | 
				
			||||||
 | 
					                   const std::string& str,
 | 
				
			||||||
 | 
					                   size_t wireSize,
 | 
				
			||||||
 | 
					                   const ix::WebSocketErrorInfo& error,
 | 
				
			||||||
 | 
					                   const ix::WebSocketCloseInfo& closeInfo,
 | 
				
			||||||
 | 
					                   const ix::WebSocketHttpHeaders& headers)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (messageType == ix::WebSocket_MessageType_Open)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        std::cerr << "New connection" << std::endl;
 | 
				
			||||||
 | 
					                        std::cerr << "Headers:" << std::endl;
 | 
				
			||||||
 | 
					                        for (auto it : headers)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            std::cerr << it.first << ": " << it.second << std::endl;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else if (messageType == ix::WebSocket_MessageType_Close)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        std::cerr << "Closed connection" << std::endl;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else if (messageType == ix::WebSocket_MessageType_Message)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        for (auto&& client : server.getClients())
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if (client != webSocket)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                client->send(str);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto res = server.listen();
 | 
				
			||||||
 | 
					    if (!res.first)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::cerr << res.second << std::endl;
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    server.start();
 | 
				
			||||||
 | 
					    server.wait();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user