GNU
|
Liberty Eiffel
|
Automated Tests
|
Wiki
|
Savannah project
|
Debian packages
|
Documentation
>
libraries
>
SOCKET_SERVER_JOB
+
Point of view
All features
ANY
JOB
LOOP_ITEM
SERVER
All features
class SOCKET_SERVER_JOB
Summary
top
Encapsulate the server in a sequencer-aware job.
Direct parents
Inherit list:
JOB
Class invariant
top
priority /= Minimum_integer
Overview
top
Creation features
{
ANY
}
make
(a_server:
SOCKET_SERVER
, a_read_sync:
BOOLEAN
)
Features
{
ANY
}
when_connect
(handler:
PROCEDURE
[
TUPLE 1
[
SOCKET_INPUT_OUTPUT_STREAM
]])
What to do when connection happens (i.e. some client tries to connect to the server).
when_shutdown
(handler:
PROCEDURE
[
TUPLE 1
[SOCKET_SERVER_JOB]])
Should be more accurately be called
when_shutdown_or_halt
.
shutdown
Wait for the connections to finish, then stop the server.
halt
done
:
BOOLEAN
done
returns
True
when the job is finished.
{
SERVER
}
will_shutdown
:
BOOLEAN
{}
handle_shutdown
The following features are inherited from
JOB
:
{
LOOP_ITEM
}
prepare
(events:
EVENTS_SET
)
Use
events
to describe condition that make this job ready to
continue
.
is_ready
(events:
EVENTS_SET
):
BOOLEAN
Check if this job is ready to continue his work.
continue
Continue to do the job.
restart
Configure the job like in its initial state.
{}
make
(a_server:
SOCKET_SERVER
, a_read_sync:
BOOLEAN
)
server
:
SOCKET_SERVER
read_sync
:
BOOLEAN
connect_handlers
:
FAST_ARRAY
[
PROCEDURE
[
TUPLE 1
[
SOCKET_INPUT_OUTPUT_STREAM
]]]
shutdown_handlers
:
FAST_ARRAY
[
PROCEDURE
[
TUPLE 1
[SOCKET_SERVER_JOB]]]
{
JOB
,
LOOP_ITEM
}
priority
:
INTEGER_32
never change a job's priority after inserting it in loop_item.
{
LOOP_ITEM
}
infix "<"
(other:
JOB
):
BOOLEAN
Maximum:
{}
Maximum_character_code
:
INTEGER_16
Largest supported code for
CHARACTER
values.
Maximum_integer_8
:
INTEGER_8
Largest supported value of type
INTEGER_8
.
Maximum_integer_16
:
INTEGER_16
Largest supported value of type
INTEGER_16
.
Maximum_integer
:
INTEGER_32
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_32
:
INTEGER_32
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_64
:
INTEGER_64
Largest supported value of type
INTEGER_64
.
Maximum_real_32
:
REAL_32
Largest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Maximum_real
:
REAL_64
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Maximum_real_64
:
REAL_64
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Maximum_real_80
:
REAL_EXTENDED
Largest supported value of type
REAL_80
.
Minimum:
{}
Minimum_character_code
:
INTEGER_16
Smallest supported code for
CHARACTER
values.
Minimum_integer_8
:
INTEGER_8
Smallest supported value of type
INTEGER_8
.
Minimum_integer_16
:
INTEGER_16
Smallest supported value of type
INTEGER_16
.
Minimum_integer
:
INTEGER_32
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_32
:
INTEGER_32
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_64
:
INTEGER_64
Smallest supported value of type
INTEGER_64
.
Minimum_real_32
:
REAL_32
Smallest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Minimum_real
:
REAL_64
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Minimum_real_64
:
REAL_64
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Minimum_real_80
:
REAL_64
Smallest supported value of type
REAL_80
.
Bits:
{}
Boolean_bits
:
INTEGER_32
Number of bits in a value of type
BOOLEAN
.
Character_bits
:
INTEGER_32
Number of bits in a value of type
CHARACTER
.
Integer_bits
:
INTEGER_32
Number of bits in a value of type INTEGER.
Real_bits
:
INTEGER_32
Number of bits in a value of type REAL.
Pointer_bits
:
INTEGER_32
Number of bits in a value of type
POINTER
.
when_connect
(handler:
PROCEDURE
[
TUPLE 1
[
SOCKET_INPUT_OUTPUT_STREAM
]])
effective procedure
{
ANY
}
top
What to do when connection happens (i.e. some client tries to connect to the server).
The procedure is given the stream connected to the client.
require
not
done
when_shutdown
(handler:
PROCEDURE
[
TUPLE 1
[SOCKET_SERVER_JOB]])
effective procedure
{
ANY
}
top
Should be more accurately be called
when_shutdown_or_halt
.
The agent is called when a shutdown or a halt of the server occurs.
require
not
done
shutdown
effective procedure
{
ANY
}
top
Wait for the connections to finish, then stop the server.
No more connections will be accepted.
require
not
done
ensure
will_shutdown
halt
effective procedure
{
ANY
}
top
require
not
done
ensure
will_shutdown
done
:
BOOLEAN
writable attribute
{
ANY
}
top
done
returns
True
when the job is finished.
Then the job may be
restart
(ed) if it needs to run again.
will_shutdown
:
BOOLEAN
effective function
{
SERVER
}
top
handle_shutdown
effective procedure
{}
top
require
will_shutdown
prepare
(events:
EVENTS_SET
)
effective procedure
{
LOOP_ITEM
}
top
Use
events
to describe condition that make this job ready to
continue
.
events
describe the conditions to be satisfied before running this job for one more step.
require
events /= Void
not events.queryable
not done
is_ready
(events:
EVENTS_SET
):
BOOLEAN
effective function
{
LOOP_ITEM
}
top
Check if this job is ready to continue his work.
events
describe the events which occurred.
require
events /= Void
events.queryable
not done
continue
effective procedure
{
LOOP_ITEM
}
top
Continue to do the job.
The work to do has to be small work and non blocking, it will continue on next call.
require
not done
restart
effective procedure
{
LOOP_ITEM
}
top
Configure the job like in its initial state.
Example: when some window dialog appears a second time, all jobs from this window are restarted.
require
done
ensure
not done
make
(a_server:
SOCKET_SERVER
, a_read_sync:
BOOLEAN
)
effective procedure
{}
top
server
:
SOCKET_SERVER
writable attribute
{}
top
read_sync
:
BOOLEAN
writable attribute
{}
top
connect_handlers
:
FAST_ARRAY
[
PROCEDURE
[
TUPLE 1
[
SOCKET_INPUT_OUTPUT_STREAM
]]]
writable attribute
{}
top
shutdown_handlers
:
FAST_ARRAY
[
PROCEDURE
[
TUPLE 1
[SOCKET_SERVER_JOB]]]
writable attribute
{}
top
priority
:
INTEGER_32
writable attribute
{
JOB
,
LOOP_ITEM
}
top
never change a job's priority after inserting it in loop_item.
Priority should only be set at creation time.
infix "<"
(other:
JOB
):
BOOLEAN
effective function
{
LOOP_ITEM
}
top
Maximum_character_code
:
INTEGER_16
{}
top
Largest supported code for
CHARACTER
values.
ensure
meaningful:
Result >= 127
Maximum_integer_8
:
INTEGER_8
is 127
constant attribute
{}
top
Largest supported value of type
INTEGER_8
.
Maximum_integer_16
:
INTEGER_16
is 32767
constant attribute
{}
top
Largest supported value of type
INTEGER_16
.
Maximum_integer
:
INTEGER_32
is 2147483647
constant attribute
{}
top
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_32
:
INTEGER_32
is 2147483647
constant attribute
{}
top
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_64
:
INTEGER_64
is 9223372036854775807
constant attribute
{}
top
Largest supported value of type
INTEGER_64
.
Maximum_real_32
:
REAL_32
is {REAL_32 3.4028234663852885981170418348451692544e+38}
constant attribute
{}
top
Largest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Maximum_real
:
REAL_64
{}
top
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_64
:
REAL_64
{}
top
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_80
:
REAL_EXTENDED
{}
top
Largest supported value of type
REAL_80
.
ensure
meaningful:
Result >=
Maximum_real
Minimum_character_code
:
INTEGER_16
{}
top
Smallest supported code for
CHARACTER
values.
ensure
meaningful:
Result <= 0
Minimum_integer_8
:
INTEGER_8
is -128
constant attribute
{}
top
Smallest supported value of type
INTEGER_8
.
Minimum_integer_16
:
INTEGER_16
is -32768
constant attribute
{}
top
Smallest supported value of type
INTEGER_16
.
Minimum_integer
:
INTEGER_32
is -2147483648
constant attribute
{}
top
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_32
:
INTEGER_32
is -2147483648
constant attribute
{}
top
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_64
:
INTEGER_64
is -9223372036854775808
constant attribute
{}
top
Smallest supported value of type
INTEGER_64
.
Minimum_real_32
:
REAL_32
is {REAL_32 -3.40282346638528859811704183484516925440e+38}
constant attribute
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Minimum_real
:
REAL_64
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_64
:
REAL_64
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_80
:
REAL_64
{}
top
Smallest supported value of type
REAL_80
.
ensure
meaningful:
Result <= 0.0
Boolean_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
BOOLEAN
.
ensure
meaningful:
Result >= 1
Character_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
CHARACTER
.
ensure
meaningful:
Result >= 1
large_enough:
{INTEGER_32 2} ^ Result >=
Maximum_character_code
Integer_bits
:
INTEGER_32
{}
top
Number of bits in a value of type INTEGER.
ensure
integer_definition:
Result = 32
Real_bits
:
INTEGER_32
is 64
constant attribute
{}
top
Number of bits in a value of type REAL.
Pointer_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
POINTER
.