Code Monkey home page Code Monkey logo

lua's Introduction

A lua library by zengrong.net

Dependences

Following libraries are dependented:

1. For pure lua

For some reason in my server development, I moved some packages that my wrote in to zr package (They were in cc package before).

All of the dependences were included in quick-cocos2d-x.

This library has already been merged into quick-cocos2d-x framework.

In quick-cocos2d-x framework, these librares still use "cc" package name, and I won't update them.

3. Usage

You can import them by lib.zrong.init, it can import all of zrong's packages into a global table named zr , and also import some necessary global functions:

require("lib.zrong.init")

or if you have had these necessary global functions, you can require them in your code selectively:

utils = require("lib.zrong.zr.utils.init")
net = {}
net.SocketTCP = require("lib.zrong.zr.net.SocketTCP")

The necessary global functions are:

In functions.lua

  • class
  • import
  • iskindof

4. API list

A detailed example about GNU gettext and Poedit (in chinese): https://blog.zengrong.net/post/using_gettext_in_lua/

Usage:

local Gettext = require("utils.Gettext")

-- Use lua io, cannot use in Android
local fd,err=io.open("main.mo","rb")
if not fd then return nil,err end
local raw_data=fd:read("*all")
fd:close()

local mo_data=assert(Gettext.parseData(raw_data))
print(mo_data["hello"])
-- 你好
print(mo_data["world"])
-- nil

-- Then you'll get a kind of gettext function:
local gettext= Gettext.gettext(raw_data)
print(gettext("hello"))
-- 你好
print(gettext("world"))
-- world

-- With a slight modification this will be ready-to-use for the xgettext tool:

_ = Gettext.gettext(raw_data)
print(_("hello"))
print(_("world"))

It can serialize bytes stream like ActionScript flash.utils.ByteArray

It depends on lpack.

Usage:

local ByteArray = zr.utils.ByteArray
-- use lpack to write a pack
local __pack = string.pack("<bihP2", 0x59, 11, 1101, "", "中文")

-- create a ByteArray
local __ba = ByteArray.new()

-- ByteArray can write a lpack buffer directly
__ba:writeBuf(__pack)

-- remember, lua array started from 1
__ba:setPos(1)

-- now, you can read it like actionscript
print("ba.len:", __ba:getLen())
print("ba.readByte:", __ba:readByte())
print("ba.readInt:", __ba:readInt())
print("ba.readShort:", __ba:readShort())
print("ba.readString:", __ba:readStringUShort())
print("ba.available:", __ba:getAvailable())
-- dump it
print("ba.toString(16):", __ba:toString(16))

-- create a ByteArray
local __ba2 = ByteArray.new()

-- you can write some values like actionscript
-- also, you can use chaining calls.
__ba2:writeByte(0x59)
    :writeInt(11)
    :writeShort(1101)
-- write a empty string
__ba2:writeStringUShort("")
-- write some chinese string
__ba2:writeStringUShort("中文")

-- dump it
print("ba2.toString(10):", __ba2:toString(10))

Above codes will print like these:

print result

ByteArrayVarint depends on BitOP.

ByteArrayVarint implements the Varint encoding in google protocol buffer.

See following:

To understand your simple protocol buffer encoding, you first need to understand varints. Varints are a method of serializing integers using one or more bytes. Smaller numbers take a smaller number of bytes.

Each byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number in groups of 7 bits, least significant group first.

Your can use these methods(and all ByteArray methods) in ByteArrayVarint:

Method Name Description
ByteArrayVarint.readUVInt() read a unsigned varint int
ByteArrayVarint.writeUVInt() write a unsigned varint int
ByteArrayVarint.readVInt() read varint int
ByteArrayVarint.writeVInt() write varint int
ByteArrayVarint.readStringUVInt() read a string preceding a unsigned varint int
ByteArrayVarint.writeStringUVInt() write a string preceding a unsigned varint int

On account of a BitOP limitation, ByteArrayVarint will read a unsigned int as a minus.

The SocketTCP depends on LuaSocket

Usage:

local SocketTCP = zr.net.SocketTCP
local ByteArray = zr.utils.ByteArray

socket = SocketTCP.new("127.0.0.1", 12001, false)
socket:addEventListener(SocketTCP.EVENT_CONNECTED, onStatus)
socket:addEventListener(SocketTCP.EVENT_CLOSE, onStatus)
socket:addEventListener(SocketTCP.EVENT_CLOSED, onStatus)
socket:addEventListener(SocketTCP.EVENT_CONNECT_FAILURE, onStatus)
socket:addEventListener(SocketTCP.EVENT_DATA, onData)

socket:send(ByteArray.new():writeByte(0x59):getPack())

function onStatus(__event)
    echoInfo("socket status: %s", __event.name)
end

function onData(__event)
    echoInfo("socket status: %s, data:%s", __event.name, ByteArray.toString(__event.data))
end

zr.log package is very similar to python logging package.

local logFilePath = 'log.txt'
local flogh = nil
local logFileHandler = io.open(logFilePath, 'w+b')

-- FileHandler can accept a file handler or a file name.
if logFileHandler then
    flogh = zr.log.FileHandler.new(logFileHandler, nil, true, true)
    flogh.filename = logFilePath
else
    flogh = zr.log.FileHandler.new(logFilePath, 'w+b', true, true)
end

local echo = print
-- A logger can accept one or more handler.
log = zr.log.Logger.new(zr.log.Logger.NOTSET, 
    zr.log.PrintHandler.new(echo), 
    flogh)
log:debug('You name?', 'zrong')
log:debug('My name is %s.', 'zrong')

-- Following contents will appear in console and log.txt.
-- [5.3278] You name?  zrong
-- [5.3279] My name is zrong.

5. LICENSE

BSD 3-Clause License

Copyright (c) 2018, Jacky Tsang All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

lua's People

Contributors

zrong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lua's Issues

global 'cc' (a table value)

PC 上调用
cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
这一行报错
什么原因,大神!

cc.net.SocketTCP dispatch huge close event

There are 3 schedulers only create but not release on right way!
So,if reconnected over 3 times then huge SocketTCP.EVENT_CLOSED event will be sended!
Not onley SocketTCP.EVENT_CLOSE, also EVENT_CONNECT_FAILURE.
So if modify this file,it works good.
self.connectTimeTickScheduler = scheduler.scheduleGlobal(__connectTimeTick, SOCKET_TICK_TIME)
add one raw code like this:
if self.connectTimeTickScheduler then
scheduler.unscheduleGlobal(self.connectTimeTickScheduler)
self.connectTimeTickScheduler = nil
end

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.