net/server_event.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 21 Nov 2009 17:23:51 +0000
changeset 2110 99a7f291ddd8
parent 2097 642806f67b75
child 2111 f59d9738437e
permissions -rw-r--r--
net.server_event: Change to new standard addserver() syntax
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2091
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
--[[
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
			server.lua based on lua/libevent by blastbeat
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
			notes:
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
			-- when using luaevent, never register 2 or more EV_READ at one socket, same for EV_WRITE
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
			-- you cant even register a new EV_READ/EV_WRITE callback inside another one
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
			-- never call eventcallback:close( ) from inside eventcallback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
			-- to do some of the above, use timeout events or something what will called from outside
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
			-- dont let garbagecollect eventcallbacks, as long they are running
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
			-- when using luasec, there are 4 cases of timeout errors: wantread or wantwrite during reading or writing
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
--]]
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
local SCRIPT_NAME           = "server_event.lua"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
local SCRIPT_VERSION        = "0.05"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
local SCRIPT_AUTHOR         = "blastbeat"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
local LAST_MODIFIED         = "2009/11/20"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
local cfg = {
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
	MAX_CONNECTIONS       = 100000,  -- max per server connections (use "ulimit -n" on *nix)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
	MAX_HANDSHAKE_ATTEMPS = 10,  -- attemps to finish ssl handshake
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
	HANDSHAKE_TIMEOUT     = 1,  -- timout in seconds per handshake attemp
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
	MAX_READ_LENGTH       = 1024 * 1024 * 1024 * 1024,  -- max bytes allowed to read from sockets
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
	MAX_SEND_LENGTH       = 1024 * 1024 * 1024 * 1024,  -- max bytes size of write buffer (for writing on sockets)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
	ACCEPT_DELAY          = 10,  -- seconds to wait until the next attemp of a full server to accept
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
	READ_TIMEOUT          = 60 * 30,  -- timeout in seconds for read data from socket
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
	WRITE_TIMEOUT         = 30,  -- timeout in seconds for write data on socket
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
	CONNECT_TIMEOUT       = 10,  -- timeout in seconds for connection attemps
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
	CLEAR_DELAY           = 5,  -- seconds to wait for clearing interface list (and calling ondisconnect listeners) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
	DEBUG                 = true,  -- show debug messages
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
}
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
local function use(x) return rawget(_G, x); end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
local print = use "print"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
local pcall = use "pcall"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
local ipairs = use "ipairs"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
local string = use "string"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
local select = use "select"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
local require = use "require"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
local tostring = use "tostring"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
local coroutine = use "coroutine"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
local setmetatable = use "setmetatable"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
local ssl = use "ssl"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
local socket = use "socket"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    50
local log = require ("util.logger").init("socket")
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    52
local function debug(...)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
	return log("debug", ("%s "):rep(select('#', ...)), ...)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    55
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
local bitor = ( function( ) -- thx Rici Lake
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
	local hasbit = function( x, p )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
		return x % ( p + p ) >= p
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    59
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    60
	return function( x, y ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
		local p = 1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    62
		local z = 0
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
		local limit = x > y and x or y
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
		while p <= limit do 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    65
			if hasbit( x, p ) or hasbit( y, p ) then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    66
				z = z + p
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    68
			p = p + p
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    69
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
		return z
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    74
local event = require "luaevent.core"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    75
local base = event.new( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    76
local EV_READ = event.EV_READ
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
local EV_WRITE = event.EV_WRITE
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
local EV_TIMEOUT = event.EV_TIMEOUT
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    80
local EV_READWRITE = bitor( EV_READ, EV_WRITE )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
local interfacelist = ( function( )  -- holds the interfaces for sockets
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
	local array = { }
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
	local len = 0
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    85
	return function( method, arg )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
		if "add" == method then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
			len = len + 1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    88
			array[ len ] = arg
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    89
			arg:_position( len )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
			return len
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
		elseif "delete" == method then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    92
			if len <= 0 then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    93
				return nil, "array is already empty"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    94
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    95
			local position = arg:_position()  -- get position in array
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    96
			if position ~= len then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    97
				local interface = array[ len ]  -- get last interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    98
				array[ position ] = interface  -- copy it into free position
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    99
				array[ len ] = nil  -- free last position
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   100
				interface:_position( position )  -- set new position in array
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   101
			else  -- free last position
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   102
				array[ len ] = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   103
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
			len = len - 1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
			return len    
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   106
		else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   107
			return array
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   108
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   109
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   111
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   112
-- Client interface methods
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
local interface_mt
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   115
	interface_mt = {}; interface_mt.__index = interface_mt;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   116
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
	local addevent = base.addevent
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
	local coroutine_wrap, coroutine_yield = coroutine.wrap,coroutine.yield
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
	local string_len = string.len
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
	-- Private methods
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
	function interface_mt:_position(new_position)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
			self.position = new_position or self.position
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   124
			return self.position;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   125
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   126
	function interface_mt:_close() -- regs event to start self:_destroy()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   127
			local callback = function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   128
				self:_destroy();
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   129
				self.eventclose = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   130
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   131
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   132
			self.eventclose = addevent( base, nil, EV_TIMEOUT, callback, 0 )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   133
			return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
	function interface_mt:_start_connection(plainssl) -- should be called from addclient
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
			local callback = function( event )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
				if EV_TIMEOUT == event then  -- timout during connection
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   139
					self.fatalerror = "connection timeout"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   140
					self.listener.ontimeout( self )  -- call timeout listener
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
					self:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
					debug( "new connection failed. id:", self, "error:", self.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
				else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   144
					if plainssl then  -- start ssl session
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   145
						self:_start_ssl( self.listener.onconnect )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   146
					else  -- normal connection
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   147
						self:_start_session( self.listener.onconnect )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   148
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   149
					debug( "new connection established. id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   150
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   151
				self.eventconnect = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   152
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   153
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
			self.eventconnect = addevent( base, self.conn, EV_WRITE, callback, cfg.CONNECT_TIMEOUT )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   155
			return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
	function interface_mt:_start_session(onconnect) -- new session, for example after startssl
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
		if self.type == "client" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
			local callback = function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   160
				self:_lock( false,  false, false )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   161
				--vdebug( "start listening on client socket with id:", self )      
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   162
				self.eventread = addevent( base, self.conn, EV_READ, self.readcallback, cfg.READ_TIMEOUT )  -- register callback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   163
				onconnect( self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   164
				self.eventsession = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   165
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   166
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
			self.eventsession = addevent( base, nil, EV_TIMEOUT, callback, 0 )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
		else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
			self:_lock( false )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
			--vdebug( "start listening on server socket with id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   171
			self.eventread = addevent( base, self.conn, EV_READ, self.readcallback )  -- register callback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
		return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   174
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
	function interface_mt:_start_ssl(arg) -- old socket will be destroyed, therefore we have to close read/write events first
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   176
			--vdebug( "starting ssl session with client id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
			local _
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   178
			_ = self.eventread and self.eventread:close( )  -- close events; this must be called outside of the event callbacks!
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   179
			_ = self.eventwrite and self.eventwrite:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
			self.eventread, self.eventwrite = nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
			local err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   182
			self.conn, err = ssl.wrap( self.conn, self.sslctx )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   183
			if err then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   184
				self.fatalerror = err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   185
				self.conn = nil  -- cannot be used anymore
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
				if "onconnect" == arg then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
					self.ondisconnect = nil  -- dont call this when client isnt really connected
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   189
				self:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
				debug( "fatal error while ssl wrapping:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
				return false
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   192
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
			self.conn:settimeout( 0 )  -- set non blocking
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   194
			local handshakecallback = coroutine_wrap(
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   195
				function( event )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
					local _, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
					local attempt = 0
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   198
					local maxattempt = cfg.MAX_HANDSHAKE_ATTEMPS
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   199
					while attempt < 1000 do  -- no endless loop
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   200
						attempt = attempt + 1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   201
						debug( "ssl handshake of client with id:", self, "attemp:", attempt )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   202
						if attempt > maxattempt then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   203
							self.fatalerror = "max handshake attemps exceeded"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   204
						elseif EV_TIMEOUT == event then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   205
							self.fatalerror = "timeout during handshake"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   206
						else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   207
							_, err = self.conn:dohandshake( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   208
							if not err then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   209
								self:_lock( false, false, false )  -- unlock the interface; sending, closing etc allowed
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   210
								self.send = self.conn.send  -- caching table lookups with new client object
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   211
								self.receive = self.conn.receive
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   212
								local onsomething
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   213
								if "onconnect" == arg then  -- trigger listener
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   214
									onsomething = self.listener.onconnect
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   215
								else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   216
									onsomething = self.listener.onsslconnection
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   217
								end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   218
								self:_start_session( onsomething )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   219
								debug( "ssl handshake done" )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   220
								self.eventhandshake = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   221
								return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   222
							end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   223
							debug( "error during ssl handshake:", err )  
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   224
							if err == "wantwrite" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   225
								event = EV_WRITE
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   226
							elseif err == "wantread" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   227
								event = EV_READ
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   228
							else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   229
								self.fatalerror = err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   230
							end            
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   231
						end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   232
						if self.fatalerror then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   233
							if "onconnect" == arg then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   234
								self.ondisconnect = nil  -- dont call this when client isnt really connected
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   235
							end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   236
							self:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   237
							debug( "handshake failed because:", self.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   238
							self.eventhandshake = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   239
							return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   240
						end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   241
						event = coroutine_yield( event, cfg.HANDSHAKE_TIMEOUT )  -- yield this monster...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   242
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   243
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   244
			)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   245
			debug "starting handshake..."
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   246
			self:_lock( false, true, true )  -- unlock read/write events, but keep interface locked 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   247
			self.eventhandshake = addevent( base, self.conn, EV_READWRITE, handshakecallback, cfg.HANDSHAKE_TIMEOUT )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   248
			return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   249
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   250
	function interface_mt:_destroy()  -- close this interface + events and call last listener
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   251
			debug( "closing client with id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   252
			self:_lock( true, true, true )  -- first of all, lock the interface to avoid further actions
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   253
			local _
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   254
			_ = self.eventread and self.eventread:close( )  -- close events; this must be called outside of the event callbacks!
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   255
			if self.type == "client" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   256
				_ = self.eventwrite and self.eventwrite:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   257
				_ = self.eventhandshake and self.eventhandshake:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   258
				_ = self.eventstarthandshake and self.eventstarthandshake:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   259
				_ = self.eventconnect and self.eventconnect:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   260
				_ = self.eventsession and self.eventsession:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   261
				_ = self.eventwritetimeout and self.eventwritetimeout:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   262
				_ = self.eventreadtimeout and self.eventreadtimeout:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   263
				_ = self.ondisconnect and self:ondisconnect( self.fatalerror )  -- call ondisconnect listener (wont be the case if handshake failed on connect)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   264
				_ = self.conn and self.conn:close( ) -- close connection, must also be called outside of any socket registered events!
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   265
				self._server:counter(-1);
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   266
				self.eventread, self.eventwrite = nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   267
				self.eventstarthandshake, self.eventhandshake, self.eventclose = nil, nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   268
				self.readcallback, self.writecallback = nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   269
			else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   270
				self.conn:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   271
				self.eventread, self.eventclose = nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   272
				self.interface, self.readcallback = nil, nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   273
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   274
			interfacelist( "delete", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   275
			return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   276
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   277
	function interface_mt:_lock(nointerface, noreading, nowriting)  -- lock or unlock this interface or events
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   278
			self.nointerface, self.noreading, self.nowriting = nointerface, noreading, nowriting
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   279
			return nointerface, noreading, nowriting
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   280
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   281
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   282
	function interface_mt:counter(c)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   283
		if c then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   284
			self._connections = self._connections - c
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   285
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   286
		return self._connections
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   287
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   288
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   289
	-- Public methods
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   290
	function interface_mt:write(data)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   291
		--vdebug( "try to send data to client, id/data:", self, data )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   292
		data = tostring( data )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   293
		local len = string_len( data )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   294
		local total = len + self.writebufferlen
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   295
		if total > cfg.MAX_SEND_LENGTH then  -- check buffer length
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   296
			local err = "send buffer exceeded"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   297
			debug( "error:", err )  -- to much, check your app
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   298
			return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   299
		end 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   300
		self.writebuffer = self.writebuffer .. data -- new buffer
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   301
		self.writebufferlen = total
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   302
		if not self.eventwrite then  -- register new write event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   303
			--vdebug( "register new write event" )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   304
			self.eventwrite = addevent( base, self.conn, EV_WRITE, self.writecallback, cfg.WRITE_TIMEOUT )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   305
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   306
		return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   307
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   308
	function interface_mt:close(now)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   309
		debug( "try to close client connection with id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   310
		if self.type == "client" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   311
			self.fatalerror = "client to close"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   312
			if ( not self.eventwrite ) or now then  -- try to close immediately
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   313
				self:_lock( true, true, true )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   314
				self:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   315
				return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   316
			else  -- wait for incomplete write request
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   317
				self:_lock( true, true, false )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   318
				debug "closing delayed until writebuffer is empty"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   319
				return nil, "writebuffer not empty, waiting"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   320
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   321
		else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   322
			debug( "try to close server with id:", self, "args:", now )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   323
			self.fatalerror = "server to close"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   324
			self:_lock( true )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   325
			local count = 0
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   326
			for _, item in ipairs( interfacelist( ) ) do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   327
				if ( item.type ~= "server" ) and ( item._server == self ) then  -- client/server match
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   328
					if item:close( now ) then  -- writebuffer was empty
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   329
						count = count + 1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   330
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   331
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   332
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   333
			local timeout = 0  -- dont wait for unfinished writebuffers of clients...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   334
			if not now then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   335
				timeout = cfg.WRITE_TIMEOUT  -- ...or wait for it
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   336
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   337
			self:_close( timeout )  -- add new event to remove the server interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   338
			debug( "seconds remained until server is closed:", timeout )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   339
			return count  -- returns finished clients with empty writebuffer
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   340
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   341
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   342
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   343
	function interface_mt:server()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   344
		return self._server or self;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   345
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   346
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   347
	function interface_mt:port()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   348
		return self._port
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   349
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   350
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   351
	function interface_mt:ip()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   352
		return self._ip
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   353
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   354
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   355
	function interface_mt:ssl()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   356
		return self.usingssl
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   357
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   358
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   359
	function interface_mt:type()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   360
		return self._type or "client"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   361
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   362
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   363
	function interface_mt:connections()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   364
		return self._connections
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   365
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   366
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   367
	function interface_mt:address()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   368
		return self.addr
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   369
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   370
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   371
			
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   372
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   373
	function interface_mt:starttls()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   374
		debug( "try to start ssl at client id:", self )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   375
		local err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   376
		if not self.sslctx then  -- no ssl available
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   377
			err = "no ssl context available"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   378
		elseif self.usingssl then  -- startssl was already called
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   379
			err = "ssl already active"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   380
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   381
		if err then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   382
			debug( "error:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   383
			return nil, err      
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   384
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   385
		self.usingssl = true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   386
		self.startsslcallback = function( )  -- we have to start the handshake outside of a read/write event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   387
			self:_start_ssl();
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   388
			self.eventstarthandshake = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   389
			return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   390
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   391
		if not self.eventwrite then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   392
			self:_lock( true, true, true )  -- lock the interface, to not disturb the handshake
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   393
			self.eventstarthandshake = addevent( base, nil, EV_TIMEOUT, self.startsslcallback, 0 )  -- add event to start handshake
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   394
		else  -- wait until writebuffer is empty
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   395
			self:_lock( true, true, false )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   396
			debug "ssl session delayed until writebuffer is empty..."
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   397
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   398
		return true
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   399
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   400
	
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   401
	function interface_mt.onconnect()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   402
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   403
end			
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   404
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   405
-- End of client interface methods
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   406
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   407
local handleclient;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   408
do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   409
	local string_sub = string.sub  -- caching table lookups
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   410
	local string_len = string.len
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   411
	local addevent = base.addevent
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   412
	local coroutine_wrap = coroutine.wrap
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   413
	local socket_gettime = socket.gettime
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   414
	local coroutine_yield = coroutine.yield
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   415
	function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   416
		--vdebug("creating client interfacce...")
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   417
		local interface = {
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   418
			type = "client";
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   419
			conn = client;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   420
			currenttime = socket_gettime( );  -- safe the origin
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   421
			writebuffer = "";  -- writebuffer
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   422
			writebufferlen = 0;  -- length of writebuffer
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   423
			send = client.send;  -- caching table lookups
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   424
			receive = client.receive;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   425
			onconnect = listener.onconnect;  -- will be called when client disconnects
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   426
			ondisconnect = listener.ondisconnect;  -- will be called when client disconnects
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   427
			onincoming = listener.onincoming;  -- will be called when client sends data
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   428
			eventread = false, eventwrite = false, eventclose = false,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   429
			eventhandshake = false, eventstarthandshake = false;  -- event handler
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   430
			eventconnect = false, eventsession = false;  -- more event handler...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   431
			eventwritetimeout = false;  -- even more event handler...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   432
			eventreadtimeout = false;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   433
			fatalerror = false;  -- error message
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   434
			writecallback = false;  -- will be called on write events
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   435
			readcallback = false;  -- will be called on read events
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   436
			nointerface = true;  -- lock/unlock parameter of this interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   437
			noreading = false, nowriting = false;  -- locks of the read/writecallback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   438
			startsslcallback = false;  -- starting handshake callback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   439
			position = false;  -- position of client in interfacelist
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   440
			
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   441
			-- Properties
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   442
			_ip = ip, _port = port, _server = server, _pattern = pattern,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   443
			_sslctx = sslctx; -- parameters
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   444
			_usingssl = false;  -- client is using ssl;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   445
		}
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   446
		interface.writecallback = function( event )  -- called on write events
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   447
			--vdebug( "new client write event, id/ip/port:", interface, ip, port )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   448
			if interface.nowriting or ( interface.fatalerror and ( "client to close" ~= interface.fatalerror ) ) then  -- leave this event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   449
				--vdebug( "leaving this event because:", interface.nowriting or interface.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   450
				interface.eventwrite = false
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   451
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   452
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   453
			if EV_TIMEOUT == event then  -- took too long to write some data to socket -> disconnect
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   454
				interface.fatalerror = "timeout during writing"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   455
				debug( "writing failed:", interface.fatalerror ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   456
				interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   457
				interface.eventwrite = false
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   458
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   459
			else  -- can write :)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   460
				if interface.usingssl then  -- handle luasec
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   461
					if interface.eventreadtimeout then  -- we have to read first
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   462
						local ret = interface.readcallback( )  -- call readcallback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   463
						--vdebug( "tried to read in writecallback, result:", ret )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   464
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   465
					if interface.eventwritetimeout then  -- luasec only
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   466
						interface.eventwritetimeout:close( )  -- first we have to close timeout event which where regged after a wantread error
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   467
						interface.eventwritetimeout = false
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   468
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   469
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   470
				local succ, err, byte = interface.send( interface.conn, interface.writebuffer, 1, interface.writebufferlen )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   471
				--vdebug( "write data:", interface.writebuffer, "error:", err, "part:", byte )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   472
				if succ then  -- writing succesful
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   473
					interface.writebuffer = ""
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   474
					interface.writebufferlen = 0
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   475
					if interface.fatalerror then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   476
						debug "closing client after writing"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   477
						interface:_close()  -- close interface if needed
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   478
					elseif interface.startsslcallback then  -- start ssl connection if needed
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   479
						debug "starting ssl handshake after writing"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   480
						interface.eventstarthandshake = addevent( base, nil, EV_TIMEOUT, interface.startsslcallback, 0 )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   481
					elseif interface.eventreadtimeout then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   482
						return EV_WRITE, EV_TIMEOUT
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   483
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   484
					interface.eventwrite = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   485
					return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   486
				elseif byte then  -- want write again
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   487
					--vdebug( "writebuffer is not empty:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   488
					interface.writebuffer = string_sub( interface.writebuffer, byte + 1, interface.writebufferlen )  -- new buffer
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   489
					interface.writebufferlen = interface.writebufferlen - byte            
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   490
					if "wantread" == err then  -- happens only with luasec
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   491
						local callback = function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   492
							interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   493
							interface.eventwritetimeout = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   494
							return evreturn, evtimeout
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   495
						end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   496
						interface.eventwritetimeout = addevent( base, nil, EV_TIMEOUT, callback, cfg.WRITE_TIMEOUT )  -- reg a new timeout event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   497
						debug( "wantread during write attemp, reg it in readcallback but dont know what really happens next..." )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   498
						-- hopefully this works with luasec; its simply not possible to use 2 different write events on a socket in luaevent
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   499
						return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   500
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   501
					return EV_WRITE, cfg.WRITE_TIMEOUT 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   502
				else  -- connection was closed during writing or fatal error
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   503
					interface.fatalerror = err or "fatal error"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   504
					debug( "connection failed in write event:", interface.fatalerror ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   505
					interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   506
					interface.eventwrite = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   507
					return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   508
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   509
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   510
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   511
		local usingssl, receive = interface._usingssl, interface.receive;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   512
		interface.readcallback = function( event )  -- called on read events
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   513
			--vdebug( "new client read event, id/ip/port:", interface, ip, port )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   514
			if interface.noreading or interface.fatalerror then  -- leave this event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   515
				--vdebug( "leaving this event because:", interface.noreading or interface.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   516
				interface.eventread = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   517
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   518
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   519
			if EV_TIMEOUT == event then  -- took too long to get some data from client -> disconnect
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   520
				interface.fatalerror = "timeout during receiving"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   521
				debug( "connection failed:", interface.fatalerror ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   522
				interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   523
				interface.eventread = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   524
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   525
			else -- can read
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   526
				if usingssl then  -- handle luasec
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   527
					if interface.eventwritetimeout then  -- ok, in the past writecallback was regged
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   528
						local ret = interface.writecallback( )  -- call it
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   529
						--vdebug( "tried to write in readcallback, result:", ret )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   530
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   531
					if interface.eventreadtimeout then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   532
						interface.eventreadtimeout:close( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   533
						interface.eventreadtimeout = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   534
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   535
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   536
				local buffer, err, part = receive( client, pattern )  -- receive buffer with "pattern"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   537
				--vdebug( "read data:", buffer, "error:", err, "part:", part )        
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   538
				buffer = buffer or part or ""
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   539
				local len = string_len( buffer )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   540
				if len > cfg.MAX_READ_LENGTH then  -- check buffer length
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   541
					interface.fatalerror = "receive buffer exceeded"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   542
					debug( "fatal error:", interface.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   543
					interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   544
					interface.eventread = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   545
					return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   546
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   547
				if err and ( "timeout" ~= err ) then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   548
					if "wantwrite" == err then -- need to read on write event
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   549
						if not interface.eventwrite then  -- register new write event if needed
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   550
							interface.eventwrite = addevent( base, interface.conn, EV_WRITE, interface.writecallback, cfg.WRITE_TIMEOUT )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   551
						end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   552
						interface.eventreadtimeout = addevent( base, nil, EV_TIMEOUT,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   553
							function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   554
								interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   555
							end, cfg.READ_TIMEOUT
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   556
						)             
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   557
						debug( "wantwrite during read attemp, reg it in writecallback but dont know what really happens next..." )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   558
						-- to be honest i dont know what happens next, if it is allowed to first read, the write etc...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   559
					else  -- connection was closed or fatal error            
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   560
						interface.fatalerror = err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   561
						debug( "connection failed in read event:", interface.fatalerror ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   562
						interface:_close()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   563
						interface.eventread = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   564
						return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   565
					end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   566
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   567
				interface.onincoming( interface, buffer, err )  -- send new data to listener
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   568
				return EV_READ, cfg.READ_TIMEOUT
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   569
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   570
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   571
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   572
		client:settimeout( 0 )  -- set non blocking
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   573
		setmetatable(interface, interface_mt)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   574
		interfacelist( "add", interface )  -- add to interfacelist
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   575
		return interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   576
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   577
end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   578
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   579
local handleserver
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   580
do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   581
	function handleserver( server, addr, port, pattern, listener, sslctx, startssl )  -- creates an server interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   582
		debug "creating server interface..."
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   583
		local interface = {
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   584
			_connections = 0;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   585
			
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   586
			conn = server;
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   587
			onconnect = listener.onconnect;  -- will be called when new client connected
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   588
			eventread = false;  -- read event handler
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   589
			eventclose = false; -- close event handler
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   590
			readcallback = false; -- read event callback
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   591
			fatalerror = false; -- error message
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   592
			nointerface = true;  -- lock/unlock parameter
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   593
		}
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   594
		interface.readcallback = function( event )  -- server handler, called on incoming connections
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   595
			--vdebug( "server can accept, id/addr/port:", interface, addr, port )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   596
			if interface.fatalerror then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   597
				--vdebug( "leaving this event because:", self.fatalerror )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   598
				interface.eventread = nil
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   599
				return -1
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   600
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   601
			local delay = cfg.ACCEPT_DELAY
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   602
			if EV_TIMEOUT == event then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   603
				if interface._connections >= cfg.MAX_CONNECTIONS then  -- check connection count
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   604
					debug( "to many connections, seconds to wait for next accept:", delay )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   605
					return EV_TIMEOUT, delay  -- timeout...
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   606
				else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   607
					return EV_READ  -- accept again
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   608
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   609
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   610
			--vdebug("max connection check ok, accepting...")
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   611
			local client, err = server:accept()    -- try to accept; TODO: check err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   612
			while client do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   613
				if interface._connections >= cfg.MAX_CONNECTIONS then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   614
					client:close( )  -- refuse connection
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   615
					debug( "maximal connections reached, refuse client connection; accept delay:", delay )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   616
					return EV_TIMEOUT, delay  -- delay for next accept attemp
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   617
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   618
				local ip, port = client:getpeername( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   619
				interface._connections = interface._connections + 1  -- increase connection count
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   620
				local clientinterface = handleclient( client, ip, port, interface, pattern, listener, nil, sslctx )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   621
				--vdebug( "client id:", clientinterface, "startssl:", startssl )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   622
				if startssl then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   623
					clientinterface:_start_ssl( clientinterface.onconnect )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   624
				else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   625
					clientinterface:_start_session( clientinterface.onconnect )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   626
				end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   627
				debug( "accepted incoming client connection from:", ip, port )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   628
				client, err = server:accept()    -- try to accept again
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   629
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   630
			return EV_READ
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   631
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   632
		
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   633
		server:settimeout( 0 )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   634
		setmetatable(interface, interface_mt)
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   635
		interfacelist( "add", interface )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   636
		interface:_start_session()
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   637
		return interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   638
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   639
end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   640
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   641
local addserver = ( function( )
2110
99a7f291ddd8 net.server_event: Change to new standard addserver() syntax
Matthew Wild <mwild1@gmail.com>
parents: 2097
diff changeset
   642
	return function( addr, port, listener, pattern, sslcfg, startssl )  -- TODO: check arguments
2096
7d2f3ef5aa83 net.server_event: Comment overly verbose log message
Matthew Wild <mwild1@gmail.com>
parents: 2092
diff changeset
   643
		--vdebug( "creating new tcp server with following parameters:", addr or "nil", port or "nil", sslcfg or "nil", startssl or "nil")
2110
99a7f291ddd8 net.server_event: Change to new standard addserver() syntax
Matthew Wild <mwild1@gmail.com>
parents: 2097
diff changeset
   644
		local server, err = socket.bind( addr, port, cfg.ACCEPT_QUEUE )  -- create server socket
2091
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   645
		if not server then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   646
			debug( "creating server socket failed because:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   647
			return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   648
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   649
		local sslctx
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   650
		if sslcfg then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   651
			if not ssl then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   652
				debug "fatal error: luasec not found"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   653
				return nil, "luasec not found"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   654
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   655
			sslctx, err = ssl.newcontext( sslcfg )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   656
			if err then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   657
				debug( "error while creating new ssl context for server socket:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   658
				return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   659
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   660
		end      
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   661
		local interface = handleserver( server, addr, port, pattern, listener, sslctx, startssl )  -- new server handler
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   662
		debug( "new server created with id:", tostring(interface))
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   663
		return interface
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   664
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   665
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   666
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   667
local wrapclient = ( function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   668
	return function( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   669
		debug( "try to connect to:", addr, serverport, "with parameters:", pattern, localaddr, localport, sslcfg, startssl )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   670
		local sslctx
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   671
		if sslcfg then  -- handle ssl/new context
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   672
			if not ssl then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   673
				debug "need luasec, but not available" 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   674
				return nil, "luasec not found"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   675
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   676
			sslctx, err = ssl.newcontext( sslcfg )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   677
			if err then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   678
				debug( "cannot create new ssl context:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   679
				return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   680
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   681
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   682
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   683
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   684
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   685
local addclient = ( function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   686
	return function( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   687
		local client, err = socket.tcp()  -- creating new socket
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   688
		if not client then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   689
			debug( "cannot create socket:", err ) 
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   690
			return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   691
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   692
		client:settimeout( 0 )  -- set nonblocking
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   693
		if localaddr then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   694
			local res, err = client:bind( localaddr, localport, -1 )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   695
			if not res then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   696
				debug( "cannot bind client:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   697
				return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   698
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   699
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   700
		local res, err = client:connect( addr, serverport )  -- connect
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   701
		if res or ( err == "timeout" ) then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   702
			local ip, port = client:getsockname( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   703
			local server = function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   704
				return nil, "this is a dummy server interface"
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   705
			end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   706
			local interface = handleclient( client, ip, port, server, pattern, listener, sslctx )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   707
			interface:_start_connection( startssl )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   708
			debug( "new connection id:", interface )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   709
			return interface, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   710
		else
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   711
			debug( "new connection failed:", err )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   712
			return nil, err
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   713
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   714
		return wrapclient( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )    
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   715
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   716
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   717
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   718
local loop = function( )  -- starts the event loop
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   719
	return base:loop( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   720
end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   721
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   722
local newevent = ( function( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   723
	local add = base.addevent
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   724
	return function( ... )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   725
		return add( base, ... )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   726
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   727
end )( )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   728
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   729
local closeallservers = function( arg )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   730
	for _, item in ipairs( interfacelist( ) ) do
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   731
		if item "type" == "server" then
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   732
			item( "close", arg )
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   733
		end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   734
	end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   735
end
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   736
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   737
return {
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   738
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   739
	cfg = cfg,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   740
	base = base,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   741
	loop = loop,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   742
	event = event,
2097
642806f67b75 net.server_event: Export base as event_base
Matthew Wild <mwild1@gmail.com>
parents: 2096
diff changeset
   743
	event_base = base,
2091
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   744
	addevent = newevent,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   745
	addserver = addserver,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   746
	addclient = addclient,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   747
	wrapclient = wrapclient,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   748
	closeallservers = closeallservers,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   749
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   750
	__NAME = SCRIPT_NAME,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   751
	__DATE = LAST_MODIFIED,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   752
	__AUTHOR = SCRIPT_AUTHOR,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   753
	__VERSION = SCRIPT_VERSION,
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   754
6fd686a45806 net.server_event: Initial commit of server_event.lua. Don't get too excited, it's not used at all yet, and is still incomplete :)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   755
}