[触动精灵]触动精灵官方手册流水账3

如何建立自己的ftp

(最省事的办法是直接找个免费的网络空间 用这个空间的ftp做测试就好)

http://soft.onlinedown.net/soft/8718.htm   FileZilla Server 0.9.43 中文版和对应的配置流程

注意 ftp目录必须是共享文件夹 否则会提示报错

http://www.xitongcheng.com/jiaocheng/win10_article_48002.html   win10下共享文件夹的创建

创建成功后 我们可以用局域网ip来尝试访问我们刚刚建立好的ftp服务器  可以正常使用 这个ftp服务器在当前网段的局域网内是可以自由访问的 更加复杂的就不深究了

触动下的ftp函数的使用整合

整合了下 汇总成一个函数

--从指定的ftp服务器下载指定的文件 然后返回下载文件的内容
--参数ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath
--            ftpPath="192.168.1.101"--默认端口就是21  这就不写了
--            ftpUser="zjl"--ftp账号
--            ftpPwd="123"--ftp密码
--            ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里
--            ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径
--返回值 失败了返回false 成功则返回下载的文件内容
function getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath)
        return try{
        function ()
            --下面代码随便写 有可能抛出异常即可
            local ts=require("ts")
            local status,dwStatus
            local result=false

            ts.ftp.setFTPTimeOut(15) --设置 FTP 超时时间
            status = ts.ftp.connect(ftpPath,ftpUser,ftpPwd);
            if status then
                dwStatus = ts.ftp.download(ftpDownloadToPath,ftpDownloadPath)

                --下载服务器上文件到本地
                if dwStatus then
                    if isFileExist(ftpDownloadToPath) then
                        result=readFileString(ftpDownloadToPath)
                    else
                        error("下载成功的文件并不存在")
                    end

                else
                    --toast("下载文件失败", 1)
                    error("下载文件失败")
                end
                ts.ftp.close()--断开 这个是必须要写的
            else
                error("连接ftp服务器失败")
            end

            return result
        end,
        catch{
            function (errors)
                --这里对应函数名要改
                local tempStr=""
                tempStr="函数[" .. tostring("getFtpFileContents") .. "] 错误信息:".. tostring(errors)
                traceprint(tempStr)
                dialog(tempStr, 3)
            end
        }
    }
end
--使用实例
ftpPath="192.168.1.101"--默认端口就是21  这就不写了
ftpUser="zjl"
ftpPwd="123"
ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里
ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径

tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath)
if tempStr1 then
    traceprint(tempStr1)
else
    traceprint("没有获得ftp文件内容")
end

如何避免json字符串转化表不崩溃

一般而言我习惯中控文件的内容是 json字符串或者xml  这样非常方便解析成表 但是有个问题 一旦传递进函数的不是json标准的字符串 那么解析就会报错

--json字符串转换为表 因为如果字符串不符合json标准 就会报错 所以我们这里把这个功能封装一下 表转化json字符串不用管除非传递进去的是函数变量 否则不会报错
--使用的时候先判断函数的返回结果是nil false 还是真 是真的话自然返回的就是成功转化的表
--[[
local temp3=jsonStrToTable(jsonstring)
if temp3 then
else
    traceprint("字符串不符合json标准 无法转化 启用默认配置")
    temp3=defaultFtpConfig
end
--]]
function jsonStrToTable(jsonStr)
        return try{
        function ()
            --下面代码随便写 有可能抛出异常即可
            local ts=require("ts")
            local json = ts.json
            local result=false
            result=json.decode(jsonStr)
            return result
        end,
        catch{
            function (errors)
                --这里对应函数名要改
                local tempStr=""
                tempStr="函数[" .. tostring("jsonStrToTable") .. "] 错误信息:".. tostring(errors)
                traceprint(tempStr)
                --dialog(tempStr, 3)
                toast(tempStr) mSleep(3000)
            end
        }
    }
end

个人理解的ftp在触动下的用处

那就是作为一个最简易的中控平台来使用 以上面建立起来的局域网ftp服务器为例

假如 当前局域网内 有10台手机运行触动脚本  这些脚本都可以通过触动提供的ftp函数来访问 这个ftp服务器上的1.txt的内容

如果我们想通过ftp服务器上的1.txt来控制这10台手机的触动脚本的运行 那么应该如何写

需要注意的是 一旦访问不到ftp服务器  但是本机可以正常访问ftp服务器  检查下本机的杀毒软件 安全大师之类的 windows自带的防火墙也关闭一下以防万一  很多时候不是ftp服务器设置的问题 都是其他的阻碍  我个人用的测试环境是雷电模拟器  要保证当前环境和ftp服务器在一个网段 雷电模拟器有桥接方式  我直接指定网关和局域网ip  这样才能正常连接到ftp服务器

注意:苹果手机下测试连接ftp服务器 工具选择很重要 ftpmanage就老是提示权限不足 连接不上 换了nplayer就可以正常连接和下载了

触动ftp的假设中的实例

例子脚本基本流程:

--[[
=====脚本的基本流程====
启动app读取当前账号并登录账号
签到
检查邮箱
整理背包
买药

--日常开始
日常沃玛教主 --最多可以打4次每天
日常祖玛教主 --最多可以打4次每天
日常赤月恶魔 --最多可以打2次每天
日常火龙  --最多可以打1次每天
日常副本挑战 --最多可以打2次每天

退出账号
====启动app读取当前账号并登录账号 和 退出账号是必须的 中间的这些模块 都可以有 也可以没有  或者次数不一定就是固定的====
--]]

ftp端口:ftp端只有1个 1.txt的文件 内容是如下

--{"日常赤月恶魔":2,"日常火龙":1,"整理背包":1,"日常沃玛教主":2,"检查邮箱":1,"日常副本挑战":2,"日常祖玛教主":4,"签到":1}

意思就是 脚本基本流程中 除了第一个模块和最后一个模块 其他模块都是由这个字符串来控制执行次数的 比如  "签到":1 表示签到这模块要执行一次  "日常沃玛教主":2  沃玛教主日常要执行2次 实际上每天最多执行4次 通过这个在ftp端的1.txt文件里面的json字符串这个内容来控制其他脚本的运行(只是随便举个例子 )

触动代码思路部分:

--[[
=====脚本的基本流程====

启动app读取当前账号并登录账号
签到
检查邮箱
整理背包
买药

--日常开始
日常沃玛教主 --最多可以打4次每天
日常祖玛教主 --最多可以打4次每天
日常赤月恶魔 --最多可以打2次每天
日常火龙  --最多可以打1次每天
日常副本挑战 --最多可以打2次每天

退出账号
====启动app读取当前账号并登录账号 和 退出账号是必须的 中间的这些模块 都可以有 也可以没有  或者次数不一定就是固定的====
--]]

--方便理解 我就用汉字命名
local ts = require("ts")--使用扩展库前必须插入这一句
local json = ts.json--使用 JSON 模块前必须插入这一句

FtpConfig={} --脚本配置表

defaultFtpConfig={} --这个只是为了万一无法从ftp获取到正确的json字符串 就使用这个默认的脚本配置表
defaultFtpConfig["签到"]=1
defaultFtpConfig["检查邮箱"]=1
defaultFtpConfig["整理背包"]=1
defaultFtpConfig["日常沃玛教主"]=4
defaultFtpConfig["日常祖玛教主"]=4
defaultFtpConfig["日常赤月恶魔"]=4
defaultFtpConfig["日常火龙"]=1
defaultFtpConfig["日常副本挑战"]=2

--开始读取账号文件的账号和密码
accountPath=userPath().."/res/test.txt"  --账号文件位置
accountTable=readFile(accountPath) --读取文件内容,返回一个 table
account=""  pwd=""  tempTable1={} tempTable2={} tempStr1=""

--ftp相关变量
ftpPath="192.168.1.101"--默认端口就是21  这就不写了
ftpUser="zjl"
ftpPwd="123"
ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里
ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径

--整个循环是遍历账号密码的
for k,v in pairs(accountTable) do

    if string.trim(v)~="" then--本行的账号密码信息不是空 才会执行对应操作 为空自然开始下个账号的读取

        tempTable1=strSplit(v,"-")--分析出账号和密码
        account=string.trim(tempTable1[1])
        account=string.trim(tempTable1[2])

        --访问ftp 获取脚本配置的json字符串 并转化为脚本配置表
        tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath)
        if tempStr1 then--判断下是否从ftp取到了对应的json配置字符串
            --成功获取了后 开始把json字符串转化为脚本配置表
            tempTable2=jsonStrToTable(jsonstring)
            if tempTable2 then
                --成功把json字符串转化为表 克隆默认配置表 免得污染它
                FtpConfig= deepCopyTable(tempTable2)
            else
                --转化失败 脚本配置表等于默认的配置表内容
                toast("从ftp获取到的内容不是json字符串 用默认的配置表内容",3)
                FtpConfig=defaultFtpConfig
                mSleep(3000)
            end
        else
            --根本没从ftp获取到任何符合要求的内容 自然是用默认的配置表内容
            toast("无法从ftp获取到任何符合要求的内容 用默认的配置表内容",3)
            FtpConfig=defaultFtpConfig
            mSleep(3000)
        end

        --启动app读取当前账号并登录账号操作

        --签到
        for i=1,tonumber( FtpConfig["签到"]) do
            --签到操作部分
        end
        --检查邮箱
        for i=1,tonumber( FtpConfig["检查邮箱"]) do
            --检查邮箱操作部分
        end

        --整理背包
        for i=1,tonumber( FtpConfig["整理背包"]) do
            --整理背包操作部分
        end
        --买药
        for i=1,tonumber( FtpConfig["买药"]) do
            --买药操作部分
        end

        --日常开始
        --日常沃玛教主 --最多可以打4次每天
        for i=1,tonumber( FtpConfig["日常沃玛教主"]) do
            --日常沃玛教主操作部分
        end
        --日常祖玛教主 --最多可以打4次每天
        for i=1,tonumber( FtpConfig["日常祖玛教主"]) do
            --日常祖玛教主操作部分
        end
        --日常赤月恶魔 --最多可以打2次每天
        for i=1,tonumber( FtpConfig["日常赤月恶魔"]) do
            --日常赤月恶魔操作部分
        end
        --日常火龙  --最多可以打1次每天
        for i=1,tonumber( FtpConfig["日常火龙"]) do
            --日常火龙操作部分
        end
        --日常副本挑战 --最多可以打2次每天
        for i=1,tonumber( FtpConfig["日常副本挑战"]) do
            --日常副本挑战操作部分
        end

        --退出账号

        --异常处理  应对上面出现的意外情况进行处理 保证脚本顺利的执行下个账号

        mSleep(500)
    end

end


123

原文地址:https://www.cnblogs.com/zjl8455482/p/11420133.html

时间: 2024-10-15 04:14:38

[触动精灵]触动精灵官方手册流水账3的相关文章

[触动精灵]触动精灵官方手册流水账1

官方手册 http://www.touchsprite.com/helpdoc#/doc?id=2148 小知识:手册的查询功能 注意 这里能精确的查询对应函数 但是无法模糊查询 比如记不起某个函数名 但是记得函数的说明的几个关键字  这样的模糊查询并不支持 触动精灵的lua版本是5.2.3 traceprint("lua版本:[" .. tostring(_VERSION) .. "]")--  [init.lua]第10行  lua版本:[Lua 5.2] 触动

Swift编程语言(中文版)官方手册翻译(第一部分)

独立翻译,进度会比较慢.等不及的可以看CocoaChina翻译小组,他们也正在组织翻译,而且人手众多,相信会提前很多完成翻译.当然质量就见仁见智了.原文可以在iTunes免费下载 目前进度 4 JUN 2014:6.5 % 前言 今天Apple发布了新的编程语言Swift,也提供了一本将近400页的 The Swift Programming Language(Swift编程语言).虽然我没有开发者账号,没法实际上机练习Swift代码,但这不影响我阅读这本书,以及用铅笔在纸上运行这些小程序.Ap

cocos3.0通过精灵控制精灵的触摸事件的实现

auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); auto sprite = this->getChildByTag(virTag)->getChildByTag(jumpTag); listener->onTouchBegan = CC_CALLBACK_2(MLayer::onTouchBegan, this); listener->onTouc

翻译:last_value()函数(已提交到MariaDB官方手册)

本文为mariadb官方手册:LAST_VALUE()的译文. 原文:https://mariadb.com/kb/en/last_value/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/last_value/ 语法 LAST_VALUE(expr,[expr,...]) 描述 LAST_VALUE()对所有表达式求值,并返回最后一个值. 这在结合使用@var:=expr为变量赋值时很有用.例如,当你想要从updated/deleted的行中获

翻译:SET Variable(已提交到MariaDB官方手册)

本文为mariadb官方手册:SET Variable的译文. 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/set-variable/ 语法 SET var_name = expr [, var_name = expr] ... 存储程序stored programs中的SET语句是普通SET语句的一个扩展功能. 变量引用的时候,可以引用存储程序内部.全局系统变

翻译:DECLARE Variable(已提交到MariaDB官方手册)

本文为mariadb官方手册:DECLARE Variable的译文. 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/declare-variable/ 语法: DECLARE var_name [, var_name] ... type [DEFAULT value] 描述 该语句用在该语句用来在存储程序stored programs中声

翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)

本文为mariadb官方手册:DECLARE HANDLER的译文. 原文:https://mariadb.com/kb/en/library/declare-handler/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/declare-handler/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnblogs.c

翻译:select into outfile(已提交到MariaDB官方手册)

本文为mariadb官方手册:SELECT INTO OUTFILE的译文. 原文:https://mariadb.com/kb/en/select-into-outfile/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/select-into-outfile/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnbl

翻译:load data infile(已提交到MariaDB官方手册)

本文为mariadb官方手册:LOAD DATA INFILE的译文. 原文:https://mariadb.com/kb/en/load-data-infile/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/load-data-infile/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnblogs.com/f