63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #pragma once
 | ||
|  | #include "squirrel.h"
 | ||
|  | #include "sqstdaux.h"
 | ||
|  | #include "sqstdblob.h"
 | ||
|  | #include "sqstdio.h"
 | ||
|  | #include "sqstdmath.h"
 | ||
|  | #include "sqstdstring.h"
 | ||
|  | #include "sqstdsystem.h"
 | ||
|  | #include <asio.hpp>
 | ||
|  | #include <asio/ssl.hpp>
 | ||
|  | #include <asio/basic_socket_streambuf.hpp>
 | ||
|  | #include <iostream>
 | ||
|  | 
 | ||
|  | static SQInteger CreateHttp(HSQUIRRELVM v) | ||
|  | { | ||
|  |     const SQChar *Host; | ||
|  |     sq_getstring(v, 2, &Host); | ||
|  |     const SQChar *Sevice; | ||
|  |     sq_getstring(v, 3, &Sevice); | ||
|  |     const SQChar *Content; | ||
|  |     sq_getstring(v, 4, &Content); | ||
|  | 
 | ||
|  |     asio::io_context ioContext; | ||
|  |     asio::ip::tcp::resolver resolver(ioContext); | ||
|  |     asio::ip::tcp::resolver::results_type endpoints = resolver.resolve(Host, Sevice); | ||
|  | 
 | ||
|  |     asio::ip::tcp::socket socket(ioContext); | ||
|  |     asio::connect(socket, endpoints); | ||
|  | 
 | ||
|  |     std::string request = std::string(Content); | ||
|  |     asio::write(socket, asio::buffer(request)); | ||
|  | 
 | ||
|  |     asio::streambuf response; | ||
|  |     asio::error_code error; | ||
|  |     asio::read(socket, response, error); | ||
|  | 
 | ||
|  |     if (error != asio::error::eof) | ||
|  |     { | ||
|  |         throw asio::system_error(error); | ||
|  |         sq_pushnull(v); | ||
|  |     } | ||
|  | 
 | ||
|  |     std::istream responseStream(&response); | ||
|  |     std::ostringstream oss; | ||
|  |     oss << responseStream.rdbuf(); | ||
|  |     sq_pushstring(v, oss.str().c_str(), -1); | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | static SQInteger register_Dio_func(HSQUIRRELVM v, SQFUNCTION f, const char *fname) | ||
|  | { | ||
|  |     sq_pushroottable(v); | ||
|  |     sq_pushstring(v, fname, -1); | ||
|  |     sq_newclosure(v, f, 0); // create a new function
 | ||
|  |     sq_newslot(v, -3, SQFalse); | ||
|  |     sq_pop(v, 1); // pops the root table
 | ||
|  | } | ||
|  | 
 | ||
|  | static void RegisterDio(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 创建Http
 | ||
|  |     register_Dio_func(v, CreateHttp, _SC("Sq_CreateHttp")); | ||
|  | } |