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"));
 | |
| } |