cpps 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
cpps 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
cpps 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
cpps 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
cpps 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 C/C++
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
提 交 者 johnsonyl
适用人群 未知
收录时间 2017-01-16

软件简介

cpps script

欢迎

CPPS 是一个功能强大,运行速度快,容易上手的解释型脚本语言,非常容易学习和使用,并且可以很容易的嵌入到C++项目中。

CPPS 被设计的初衷是让那些和作者一样不喜欢LUA,PY,等等脚本语法的开发者使用,它可以对接各种项目,无论游戏,WEB,或者是人工智能方面。

它的语法极为像C++,所以C++开发者可以很快速的上手,无需太深入的学习它。

招募协同软件作者,三方模块作者.

下载与编译

CPPS 的下载与安装非常简单,CPPS不依赖于任何第三方库,仅仅下载就可以编译。

LINUX & MACOS

git clone https://github.com/johnsonyl/cpps.git

cmake .

make

make install

;根据需要是否编译扩展模块.
cpps buildlibs

Windows

git clone https://github.com/johnsonyl/cpps.git

cmake .

使用Visual Studio打开libcpps.sln进行编译即可。

cd libs

;根据需要是否编译扩展模块.

cmake .

使用Visual Studio打开cppslibs.sln进行编译即可。

是不是非常简单?

libs 文件夹是内部扩展模块.具体编译规则请查看文档

脚本文档在

http://docs.cppscript.org

Example:

Hello World:

println("hello world");

base64:

#import "base64"


var s = "abc";
println("source:{s}");
var encode_s = base64.encode(s);
println("encode_s:{encode_s}");
var deocde_s = base64.decode(encode_s);
println("deocde_s:{deocde_s}");

asyncio:

async var test()
{
	println("do test function");
	await asyncio.wait_for(asyncio.sleep(2000),100);
	println("do test function done");
	return "test";

}
async var test1()
{
	println("do test1 function");
	await asyncio.sleep(1000);
	println("do test1 function done");
	
	return "test1";
}
var test_call_back(var task, var context)
{
	println(task.get_name());
	println(context);
}

async var main() {

	var task1 = asyncio.create_task(test());
	task1.set_name("Custom names are used to distinguish");
	task1.add_done_callback(test_call_back, "Custom context content");
	var task2 = asyncio.create_task(test1());

	var ret = await asyncio.wait(task1);
	if (ret.timeout())
	{
		println("task1 was timeouted.");
	}
	println("state:{ret.state()}");
	println(ret.result());
	try {
		println(await task2);
	}
	catch (var e)
	{
		println("oh,we catch some error");
		println("{e.what()} line:{e.line()} file:{e.file()}");
		println(e.callstack());
	}

	println("finish");
}

asyncio.run(main());

socket - server:

system("chcp 65001"); //use utf8 string

#import "socket"




//server
var socket_accept(var socketIndex)
{
	println("acceptd:{socketIndex}");
}
var socket_data(var socketIndex,var buffer) 
{
	var packageSize = buffer.readInt32();

	var s = buffer.readString(packageSize-4);
	println(s);

	if(s == "e")
	{
		srv.closesocket(socketIndex);
	}
	
	var writer = new Buffer();
	writer.writeString(s);
	socket_send(socketIndex, writer);
}
var socket_close(var socketIndex,var err,var errstr) 
{
	println("closed :{socketIndex},err:{err},errstr:{errstr}");
}
var socket_parser(var headerbuffer)
{
	var size = headerbuffer.readInt32();
	return size;
}
var socket_send(var socketIndex,var buffer)
{
	var writer = new Buffer();
	writer.writeInt32(buffer.length() + 4);
	writer.write(buffer,buffer.length());
	srv.send(socketIndex, writer);
}

println("start server");


var srv = new socket::server().setoption(new ServerOption(){
							ip = "0.0.0.0",
							headersize = 4,//header 4 bytes
							accept = socket_accept,
							data = socket_data,
							close = socket_close,
							parser = socket_parser
							}).listen(4060);

println("start over");
while (true){
	srv.run();
	Sleep(1);
}

client:

system("chcp 65001"); //use utf8 string

#import "socket"


//client
var socket_connected()
{
	println("connected");

	var writer = new Buffer();
	writer.writeString("this is a pingpong msg");
	socket_send(writer);
}
var socket_data(var buffer)
{
	var packageSize = buffer.readInt32();
	var s = buffer.readString(packageSize-4);
	println(s);

	Sleep(100);

	
	var writer = new Buffer();
	writer.writeString(s);
	socket_send(writer);
}
var socket_close(var err,var errstr)
{
	println("closed:err:{err},errstr:{errstr}");
}
var socket_parser(var headerbuffer)
{
	var size = headerbuffer.readInt32();
	return size;
}
var socket_send(var buffer)
{
	var writer = new Buffer();
	var size = buffer.length();
	writer.writeInt32(size + 4);
	writer.write(buffer,buffer.length());
	client.send(writer);
}
var client = new socket::client();
client.setoption(new ClientOption(){
							connected = socket_connected,
							data = socket_data,
							close = socket_close
							headersize = 4,//header 4 bytes
							parser = socket_parser
							});

var b = client.connect("127.0.0.1",4060);



while (true)
{
		client.run();
		Sleep(1);
}

httprequest:

system("chcp 65001"); //use utf8 string

#import "http"

var request = new http::httprequest();
request.setcookiefile("cookies.txt");
//request.setproxy(httpproxy.SOCK5,"192.168.1.166:25455");
//request.setproxyaccount("johnsonyl","mima");
request.addheaders({User-Agent:"cppsrequest/1.1.0"});
var ret = request.get("http://127.0.0.1:8080/Home/test?kkk=100");


println("-------------------GET-------------------------");
println("get:{ret}");
var cookies = request.getcookies();
println("cookies:{cookies}");

var headers = request.getheaders();
println("headers:{headers}");


println("-------------------POST-------------------------");
ret = request.post("http://127.0.0.1:8080/Home/test","kkk=100");
println("post:{ret}");
var cookies = request.getcookies();
println("cookies:{cookies}");

var headers = request.getheaders();
println("headers:{headers}");
println("-------------------END-------------------------");
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (8)

加载中
可以玩玩
01/28 22:02
回复
举报
johnsonyl软件作者
可以加QQ群.282081601 一起搞个开源社区. 一起贡献代码.
01/28 22:15
回复
举报
没QQ
01/29 18:22
回复
举报
熟悉编译原理,各种编译器设计与优化?
01/28 21:00
回复
举报
johnsonyl软件作者
对呀, 还有就是扩展模块开发,就像python那些模块支持.给开发者用.
01/28 22:15
回复
举报
johnsonyl软件作者
打分: 力荐
有没有人能参与项目一起开发呀.
01/28 20:38
回复
举报
类似js的一个东西? 有时间整个优缺点对比啊
2018/11/25 22:17
回复
举报
johnsonyl软件作者
c++嵌入式脚本语言,语法类似c++.
01/28 20:37
回复
举报
更多评论
暂无内容
发表了博客
2018/08/18 22:55

4、My Scripts

脚本目录列表 1、在windows编写的shell脚本利用dos2unix命令格式化一下(P308) 2、bash命令参数调试(P309) 3、使用set命令调试部分脚本内容(P312) 4、开发脚本实现触发信号后清理文件功能(P331) 5、expect的自动交互工作流程(P337) 6、执行ssh命令远程获取服务器负载值,并自动输入“yes”及用户密码(P339) 7、利用expect响应shell脚本中的多个read读入(P340) 8、开发expect脚本实现自动交互式批量执行命令(P348) 10、开发expec...

0
0
2020/12/21 23:17

admin-scripts-Administration Scripts-Hive Solutions Lda.

admin-scripts-Administration Scripts-Hive Solutions Lda. 发布:2020-12-21 23:17:54.177325 作者:Hive Solutions Lda. 作者邮箱:development@hive.pt 首页:http://admin-scripts.hive.pt 文档:None 下载链接 Copy from pypi.org 查询时间:15.882ms 渲染时间:20.148ms 本文同步分享在 博客“zhenruyan”(other)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享...

0
0
发表了博客
2014/05/12 21:30

/scripts/checkkconfigsymbols.sh

#!/bin/sh # Find Kconfig variables used in source code but never defined in Kconfig # Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> # Tested with dash. #与$*不同,$@指所有位置参数被分别表示为双引号中的N个字符串 paths="$@" #如果没有指定路径,则默认为当前目录 [ -z "$paths" ] && paths=. # Doing this once at the beginning saves a lot of time, on a cache-hot tree. #在当前...

0
0
发表了博客
2014/05/12 21:24

/scripts/binoffset.c

/*************************************************************************** * binoffset.c * (C) 2002 Randy Dunlap <rdunlap@xenotime.net> # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This pr...

0
0
发表了博客
2014/05/12 21:27

/scripts/bin2c.c

/* * Unloved program to convert a binary on stdin to a C include on stdout * * Jan 1999 Matt Mackall <mpm@selenic.com> * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. */ /* *此函数用于将一个二进制文件转化为一个C字符串数组,如可将图像文件转化为一个字符数组形式 *运行例子如下: *cat bin2c | ./bin2c test *将...

0
0
发表了博客
2013/07/04 15:26

Groovy Scripts and Classes

Classes are defined in Groovy similarly to Java. Methods can be class (static) or instance based and can be public, protected, private and support all the usual Java modifiers like synchronized. Package and class imports use the Java syntax (including static imports). Groovy automatically imports the following: java.lang java.io java.math java.net java.util groovy.lang groovy.util One differenc...

0
0
发表于大前端专区
2016/11/04 19:24

【转】Why npm Scripts?

翻译原文:http://www.cnblogs.com/zldream1106/p/5204599.html 英文原文:https://css-tricks.com/why-npm-scripts/ 以下是访客Damon Bauer发布的一篇文章。近来直接使用node package提供的命令行界面的情绪持续高涨,反之,人们对通过运行任务从而屏蔽抽象功能的热情逐渐降温。在一定程度是,你无论如何都要使用npm,而同时npm提供了脚本功能,为什么不用呢?但是我们使用npm的脚本功能的原因有很多。Damon会帮我们理解这样做...

0
0
发表于DevOps专区
2014/08/07 21:03

Using SlackBuild scripts

First we should need install the pidgin in our local system, the below commands downloads the whole directory of Pidgin: mkdir pidgin cd pidgin wget --passive -ftp ftp://slackware.at/slackware-version/source/xap/pidgin/* (using your Slackware Version replaces the version, for eample, if Slackware is 12.0, then ftp://slackware.at/slackware-12.0/source/xap/pidgin). In the download directory, we n...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
8 评论
13 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部