luaevent.lua

Fri, 31 Aug 2007 09:34:09 -0400

author
Thomas Harning Jr <harningt@gmail.com>
date
Fri, 31 Aug 2007 09:34:09 -0400
changeset 13
3e2ea1e7b2e8
permissions
-rw-r--r--

Reformed project layout from 'luaevent/*' -> '*'

13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
1 --[[
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
2 LuaEvent - Copyright (C) 2007 Thomas Harning <harningt@gmail.com>
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
3 Licensed as LGPL - See doc/COPYING for details.
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
4 ]]
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
5 module("luaevent", package.seeall)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
6 require("luaevent.core")
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
7
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
8 local EV_READ = luaevent.core.EV_READ
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
9 local EV_WRITE = luaevent.core.EV_WRITE
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
10 local fair = false -- Not recommended for most cases...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
11 local base = luaevent.core.new()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
12 local sockMap = setmetatable({}, {'__mode', 'kv'})
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
13 local function addevent(sock, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
14 local item = base:addevent(sock, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
15 if not item then print("FAILED TO SETUP ITEM") return item end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
16 local fd = sock:getfd()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
17 sockMap[item] = fd
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
18 print("SETUP ITEM FOR: ", fd)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
19 if not hookedObjectMt then
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
20 hookedObjectMt = true
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
21 --[[
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
22 local mt = debug.getmetatable(item)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
23 local oldGC = mt.__gc
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
24 mt.__gc = function(...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
25 print("RELEASING ITEM FOR: ", sockMap[(...)])
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
26 return oldGC(...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
27 end]]
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
28 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
29 return item
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
30 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
31 -- Weak keys.. the keys are the client sockets
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
32 local clientTable = setmetatable({}, {'__mode', 'kv'})
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
33
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
34 local function getWrapper()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
35 local running = coroutine.running()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
36 return function(...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
37 if coroutine.running() == running then return end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
38 return select(2, coroutine.resume(running, ...))
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
39 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
40 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
41
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
42 function send(sock, data, start, stop)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
43 local s, err
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
44 local from = start or 1
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
45 local sent = 0
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
46 repeat
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
47 from = from + sent
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
48 s, err, sent = sock:send(data, from, stop)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
49 -- Add extra coro swap for fairness
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
50 -- CURRENTLY DISABLED FOR TESTING......
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
51 if fair and math.random(100) > 90 then
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
52 if not clientTable[sock] then clientTable[sock] = addevent(sock, EV_WRITE, getWrapper()) end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
53 coroutine.yield(EV_WRITE)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
54 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
55 if s or err ~= "timeout" then return s, err, sent end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
56 if not clientTable[sock] then clientTable[sock] = addevent(sock, EV_WRITE, getWrapper()) end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
57 coroutine.yield(EV_WRITE)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
58 until false
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
59 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
60 function receive(sock, pattern, part)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
61 local s, err
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
62 pattern = pattern or '*l'
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
63 repeat
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
64 s, err, part = sock:receive(pattern, part)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
65 if s or err ~= "timeout" then return s, err, part end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
66 if not clientTable[sock] then clientTable[sock] = addevent(sock, EV_READ, getWrapper()) end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
67 coroutine.yield(EV_READ)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
68 until false
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
69 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
70 -- same as above but with special treatment when reading chunks,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
71 -- unblocks on any data received.
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
72 function receivePartial(client, pattern)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
73 local s, err, part
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
74 pattern = pattern or "*l"
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
75 repeat
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
76 s, err, part = client:receive(pattern)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
77 if s or ( (type(pattern)=="number") and part~="" and part ~=nil ) or
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
78 err ~= "timeout" then return s, err, part end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
79 if not clientTable[sock] then clientTable[sock] = addevent(sock, EV_READ, getWrapper()) end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
80 coroutine.yield(EV_READ)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
81 until false
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
82 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
83 function connect(sock, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
84 sock:settimeout(0)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
85 local ret, err = sock:connect(...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
86 if ret or err ~= "timeout" then return ret, err end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
87 if not clientTable[sock] then clientTable[sock] = addevent(sock, EV_WRITE, getWrapper()) end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
88 coroutine.yield(EV_WRITE)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
89 ret, err = sock:connect(...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
90 if err == "already connected" then
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
91 return 1
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
92 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
93 return ret, err
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
94 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
95 -- Deprecated..
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
96 function flush(sock)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
97 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
98 local function clientCoroutine(sock, handler)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
99 -- Figure out what to do ......
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
100 return handler(sock)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
101 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
102 local function handleClient(co, client, handler)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
103 local ok, res, event = coroutine.resume(co, client, handler)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
104 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
105 local function serverCoroutine(sock, callback)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
106 local listenItem = addevent(sock, EV_READ, getWrapper())
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
107 repeat
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
108 local event = coroutine.yield(EV_READ)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
109 -- Get new socket
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
110 local client = sock:accept()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
111 if client then
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
112 client:settimeout(0)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
113 local co = coroutine.create(clientCoroutine)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
114 handleClient(co, client, callback)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
115 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
116 until false
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
117 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
118 function addserver(sock, callback)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
119 local coro = coroutine.create(serverCoroutine)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
120 assert(coroutine.resume(coro, sock, callback))
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
121 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
122 function addthread(func, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
123 return coroutine.resume(coroutine.create(func), ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
124 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
125 local _skt_mt = {__index = {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
126 connect = function(self, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
127 return connect(self.socket, ...)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
128 end,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
129 send = function (self, data)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
130 return send(self.socket, data)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
131 end,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
132
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
133 receive = function (self, pattern)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
134 if (self.timeout==0) then
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
135 return receivePartial(self.socket, pattern)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
136 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
137 return receive(self.socket, pattern)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
138 end,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
139
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
140 flush = function (self)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
141 return flush(self.socket)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
142 end,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
143
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
144 settimeout = function (self,time)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
145 self.timeout=time
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
146 return
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
147 end,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
148
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
149 close = function(self)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
150 clientTable[self.socket]:close()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
151 self.socket:close()
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
152 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
153 }}
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
154 function wrap(sock)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
155 return setmetatable({socket = sock}, _skt_mt)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
156 end
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
157 loop = function(...) base:loop(...) end

mercurial