nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge: regex: bug fix, less warnings and rename
[nit.git]
/
lib
/
libevent.nit
diff --git
a/lib/libevent.nit
b/lib/libevent.nit
index
525915c
..
7794ed5
100644
(file)
--- a/
lib/libevent.nit
+++ b/
lib/libevent.nit
@@
-92,28
+92,31
@@
extern class NativeEventBase `{ struct event_base * `}
# Create a new event_base to use with the rest of Libevent
new `{ return event_base_new(); `}
# Create a new event_base to use with the rest of Libevent
new `{ return event_base_new(); `}
+
+ # Has `self` been correctly initialized?
fun is_valid: Bool do return not address_is_null
fun is_valid: Bool do return not address_is_null
- #fun creation_ok
# Event dispatching loop
#
# This loop will run the event base until either there are no more added
# events, or until something calls `exit_loop`.
# Event dispatching loop
#
# This loop will run the event base until either there are no more added
# events, or until something calls `exit_loop`.
- fun dispatch `{ event_base_dispatch(recv); `}
+ fun dispatch `{ event_base_dispatch(self); `}
# Exit the event loop
#
# TODO support timer
# Exit the event loop
#
# TODO support timer
- fun exit_loop `{ event_base_loopexit(recv, NULL); `}
+ fun exit_loop `{ event_base_loopexit(self, NULL); `}
# Destroy this instance
# Destroy this instance
- fun destroy `{ event_base_free(recv); `}
+ fun destroy `{ event_base_free(self); `}
end
# Spawned to manage a specific connection
#
# TODO, use polls
class Connection
end
# Spawned to manage a specific connection
#
# TODO, use polls
class Connection
+ super Writer
+
# Closing this connection has been requested, but may not yet be `closed`
var close_requested = false
# Closing this connection has been requested, but may not yet be `closed`
var close_requested = false
@@
-124,7
+127,7
@@
class Connection
var native_buffer_event: NativeBufferEvent
# Close this connection if possible, otherwise mark it to be closed later
var native_buffer_event: NativeBufferEvent
# Close this connection if possible, otherwise mark it to be closed later
- fun close
+ redef fun close
do
var success = native_buffer_event.destroy
close_requested = true
do
var success = native_buffer_event.destroy
close_requested = true
@@
-152,11
+155,13
@@
class Connection
fun event_callback(events: Int) do end
# Write a string to the connection
fun event_callback(events: Int) do end
# Write a string to the connection
- fun write(str: String)
+ redef fun write(str)
do
do
- var res = native_buffer_event.write(str.to_cstring, str.length)
+ native_buffer_event.write(str.to_cstring, str.bytelen)
end
end
+ redef fun write_byte(byte) do native_buffer_event.write_byte(byte)
+
# Write a file to the connection
#
# require: `path.file_exists`
# Write a file to the connection
#
# require: `path.file_exists`
@@
-164,7
+169,7
@@
class Connection
do
assert path.file_exists
do
assert path.file_exists
- var file = new IFStream.open(path)
+ var file = new FileReader.open(path)
var output = native_buffer_event.output_buffer
var fd = file.fd
var length = file.file_stat.size
var output = native_buffer_event.output_buffer
var fd = file.fd
var length = file.file_stat.size
@@
-175,49
+180,58
@@
end
# A buffer event structure, strongly associated to a connection, an input buffer and an output_buffer
extern class NativeBufferEvent `{ struct bufferevent * `}
# A buffer event structure, strongly associated to a connection, an input buffer and an output_buffer
extern class NativeBufferEvent `{ struct bufferevent * `}
+ # Write `length` bytes of `line`
fun write(line: NativeString, length: Int): Int `{
fun write(line: NativeString, length: Int): Int `{
- return bufferevent_write(recv, line, length);
+ return bufferevent_write(self, line, length);
+ `}
+
+ # Write the byte `value`
+ fun write_byte(value: Byte): Int `{
+ unsigned char byt = (unsigned char)value;
+ return bufferevent_write(self, &byt, 1);
`}
# Check if we have anything left in our buffers. If so, we set our connection to be closed
# on a callback. Otherwise we close it and free it right away.
fun destroy: Bool `{
`}
# Check if we have anything left in our buffers. If so, we set our connection to be closed
# on a callback. Otherwise we close it and free it right away.
fun destroy: Bool `{
- struct evbuffer* out = bufferevent_get_output(recv);
- struct evbuffer* in = bufferevent_get_input(recv);
+ struct evbuffer* out = bufferevent_get_output(self);
+ struct evbuffer* in = bufferevent_get_input(self);
if(evbuffer_get_length(in) > 0 || evbuffer_get_length(out) > 0) {
return 0;
} else {
if(evbuffer_get_length(in) > 0 || evbuffer_get_length(out) > 0) {
return 0;
} else {
- bufferevent_free(recv);
+ bufferevent_free(self);
return 1;
}
`}
# The output buffer associated to `self`
return 1;
}
`}
# The output buffer associated to `self`
- fun output_buffer: OutputNativeEvBuffer `{ return bufferevent_get_output(recv); `}
+ fun output_buffer: OutputNativeEvBuffer `{ return bufferevent_get_output(self); `}
# The input buffer associated to `self`
# The input buffer associated to `self`
- fun input_buffer: InputNativeEvBuffer `{ return bufferevent_get_input(recv); `}
+ fun input_buffer: InputNativeEvBuffer `{ return bufferevent_get_input(self); `}
end
# A single buffer
extern class NativeEvBuffer `{ struct evbuffer * `}
# Length of data in this buffer
end
# A single buffer
extern class NativeEvBuffer `{ struct evbuffer * `}
# Length of data in this buffer
- fun length: Int `{ return evbuffer_get_length(recv); `}
+ fun length: Int `{ return evbuffer_get_length(self); `}
end
end
+# An input buffer
extern class InputNativeEvBuffer
super NativeEvBuffer
# Empty/clear `length` data from buffer
extern class InputNativeEvBuffer
super NativeEvBuffer
# Empty/clear `length` data from buffer
- fun drain(length: Int) `{ evbuffer_drain(recv, length); `}
+ fun drain(length: Int) `{ evbuffer_drain(self, length); `}
end
end
+# An output buffer
extern class OutputNativeEvBuffer
super NativeEvBuffer
# Add file to buffer
fun add_file(fd, offset, length: Int): Bool `{
extern class OutputNativeEvBuffer
super NativeEvBuffer
# Add file to buffer
fun add_file(fd, offset, length: Int): Bool `{
- return evbuffer_add_file(recv, fd, offset, length);
+ return evbuffer_add_file(self, fd, offset, length);
`}
end
`}
end
@@
-252,7
+266,7
@@
extern class ConnectionListener `{ struct evconnlistener * `}
`}
# Get the `NativeEventBase` associated to `self`
`}
# Get the `NativeEventBase` associated to `self`
- fun base: NativeEventBase `{ return evconnlistener_get_base(recv); `}
+ fun base: NativeEventBase `{ return evconnlistener_get_base(self); `}
# Callback method on listening error
fun error_callback do
# Callback method on listening error
fun error_callback do
@@
-270,6
+284,7
@@
end
# Factory to listen on sockets and create new `Connection`
class ConnectionFactory
# Factory to listen on sockets and create new `Connection`
class ConnectionFactory
+ # The `NativeEventBase` for the dispatch loop of this factory
var event_base: NativeEventBase
# On new connection, create the handler `Connection` object
var event_base: NativeEventBase
# On new connection, create the handler `Connection` object