在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):williamwen1986/Luakit开源软件地址(OpenSource Url):https://github.com/williamwen1986/Luakit开源编程语言(OpenSource Language):C 56.6%开源软件介绍(OpenSource Introduction):LuakitA multi-platform solution in lua , you can develop your app, IOS or android app with this tool, truely write once , use everywhere. Notice , you can only use Luakit to write business logic code including network, db orm, multithread model, but not UI code, Luakit do not provide api for UI development. Why write apps with Luakit?I will say Luakit is the most effective tool to develop apps on more than one platform. Here are some reasons
ExamplesFor some simple Luakit apps, check out the source folder. Multithreading We provide some powerful multi-threading api in lua , you can see ThreadTest in Android Demo folder and IOS Demo folder. Notice , It is not only thread safety multithreading model, but also really competition multithreading model. It is the unique solution to perform competition multithreading in lua or js. Create thread , demo code -- Parma1 is the thread type ,there are five types of thread you can create.
-- BusinessThreadUI
-- BusinessThreadDB
-- BusinessThreadLOGIC
-- BusinessThreadFILE
-- BusinessThreadIO
-- Param2 is the thread name
-- Result is new threadId which is the token you should hold to do further action
local newThreadId = lua_thread.createThread(BusinessThreadLOGIC,"newThread") Perform method on a specified thread async, demo code -- Parma1 is the threadId for which you want to perform method
-- Parma2 is the modelName
-- Parma3 is the methodName
-- The result is just like you run the below code on a specified thread async
-- require(modelName).methodName("params", 1.1, {1,2,3}, function (p)
-- end)
lua_thread.postToThread(threadId,modelName,methodName,"params", 1.1, {1,2,3}, function (p)
-- do something here
end) Perform method on a specified thread sync, demo code -- Parma1 is the threadId for which you want to perform method
-- Parma2 is the modelName
-- Parma3 is the methodName
-- The result is just like you run the below code on a specified thread sync
-- local result = require(modelName).methodName("params", 1.1, {1,2,3}, function (p)
-- end)
local result = lua_thread.postToThreadSync(threadId,modelName,methodName,"params", 1.1, {1,2,3}, function (p)
-- do something here
end) ORM Luakit provide a orm solution which has below features
android orm test ios orm test Define your model, demo code -- Add the define table to dbData.lua
-- Luakit provide 7 colum types
-- IntegerField to sqlite integer
-- RealField to sqlite real
-- BlobField to sqlite blob
-- CharField to sqlite varchar
-- TextField to sqlite text
-- BooleandField to sqlite bool
-- DateTimeField to sqlite integer
user = {
__dbname__ = "test.db",
__tablename__ = "user",
username = {"CharField",{max_length = 100, unique = true, primary_key = true}},
password = {"CharField",{max_length = 50, unique = true}},
age = {"IntegerField",{null = true}},
job = {"CharField",{max_length = 50, null = true}},
des = {"TextField",{null = true}},
time_create = {"DateTimeField",{null = true}}
},
-- when you use, you can do just like below
local Table = require('orm.class.table')
local userTable = Table("user") Insert data, demo code local userTable = Table("user")
local user = userTable({
username = "user1",
password = "abc",
time_create = os.time()
})
user:save() Update data, demo code local userTable = Table("user")
local user = userTable.get:primaryKey({"user1"}):first()
user.password = "efg"
user.time_create = os.time()
user:save() Delete data, demo code local userTable = Table("user")
local user = userTable.get:primaryKey({"user1"}):first()
user:delete() Batch update, demo code local userTable = Table("user")
userTable.get:where({age__gt = 40}):update({age = 45}) Batch Delete, demo code local userTable = Table("user")
userTable.get:where({age__gt = 40}):delete() Select, demo code local userTable = Table("user")
local users = userTable.get:all()
print("select all -----------")
local user = userTable.get:first()
print("select first -----------")
users = userTable.get:limit(3):offset(2):all()
print("select limit offset -----------")
users = userTable.get:order_by({desc('age'), asc('username')}):all()
print("select order_by -----------")
users = userTable.get:where({ age__lt = 30,
age__lte = 30,
age__gt = 10,
age__gte = 10,
username__in = {"first", "second", "creator"},
password__notin = {"testpasswd", "new", "hello"},
username__null = false
}):all()
print("select where -----------")
users = userTable.get:where({"scrt_tw",30},"password = ? AND age < ?"):all()
print("select where customs -----------")
users = userTable.get:primaryKey({"first","randomusername"}):all()
print("select primaryKey -----------") Join, demo code local userTable = Table("user")
local newsTable = Table("news")
local user_group = newsTable.get:join(userTable):all()
print("join foreign_key")
user_group = newsTable.get:join(userTable,"news.create_user_id = user.username AND user.age < ?", {20}):all()
print("join where ")
user_group = newsTable.get:join(userTable,nil,nil,nil,{create_user_id = "username", title = "username"}):all()
print("join matchColumns ") Http request Luakit provide a http request interface, it has an internal dispatcher which contains a FIFO queue , here is the source code, demo code -- url , the request url
-- isPost, boolean value represent post or get
-- uploadContent, string value represent the post data
-- uploadPath, string value represent the file path to post
-- downloadPath, string value to tell where to save the response
-- headers, tables to tell the http header
-- socketWatcherTimeout, int value represent the socketTimeout
-- onResponse, function value represent the response callback
-- onProgress, function value represent the onProgress callback
lua_http.request({ url = "http://tj.nineton.cn/Heart/index/all?city=CHSH000000",
onResponse = function (response)
end}) Async socket Luakit provide a non-blocking interface for socket connect , demo code local socket = lua_asyncSocket.create("127.0.0.1",4001)
socket.connectCallback = function (rv)
if rv >= 0 then
print("Connected")
socket:read()
end
end
socket.readCallback = function (str)
print(str)
timer = lua_timer.createTimer(0)
timer:start(2000,function ()
socket:write(str)
end)
socket:read()
end
socket.writeCallback = function (rv)
print("write" .. rv)
end
socket:connect() Notification Luakit provide a notification system by which notifications can transfer through the lua environment and native environment Lua register and post notification, demo code lua_notification.createListener(function (l)
local listener = l
listener:AddObserver(3,
function (data)
print("lua Observer")
if data then
for k,v in pairs(data) do
print("lua Observer"..k..v)
end
end
end
)
end);
lua_notification.postNotification(3,
{
lua1 = "lua123",
lua2 = "lua234"
}) Android register and post notification,, demo code LuaNotificationListener listener = new LuaNotificationListener();
INotificationObserver observer = new INotificationObserver() {
@Override
public void onObserve(int type, Object info) {
HashMap<String, Integer> map = (HashMap<String, Integer>)info;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
Log.i("business", "android onObserve");
Log.i("business", entry.getKey());
Log.i("business",""+entry.getValue());
}
}
};
listener.addObserver(3, observer);
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("row", new Integer(2));
NotificationHelper.postNotification(3, map); IOS register and post notification,, demo code _notification_observer.reset(new NotificationProxyObserver(self));
_notification_observer->AddObserver(3);
- (void)onNotification:(int)type data:(id)data
{
NSLog(@"object-c onNotification type = %d data = %@", type , data);
}
post_notification(3, @{@"row":@(2)}); SetupSet up Luakit in flutter project Set up Luakit in android with jitpack Set up Luakit in IOS with cocoaPod Set up Luakit in android with source code Set up Luakit in IOS with source code IDE AndroidStudioWe provide an AndroidStudio plugin named Luakit, you can develop with AndroidStudio, we provide many useful features, demonstrate how to debug Luakit with AndroidStudio MoreAny questions? Send an email to [email protected] |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论