⚲
Project
General
Profile
Sign in
Register
Home
Projects
Help
Search
:
Ruby master
All Projects
Ruby
»
Ruby master
Overview
Activity
Roadmap
Issues
Repository
Like
Download (2.53 KB)
Bug #4841
ยป run_this.rb
peakxu (Peak Xu)
, 06/06/2011 11:24 PM
require
'rubygems'
require
'thread'
require
'singleton'
require
'webrick'
DEFAULT_PORT
=
19000
# Mimic Win32 event - allows thread guarded by mutex to wait for signal before resuming.
class
Event
<
ConditionVariable
def
initialize
(
isManualReset
=
true
,
name
=
""
)
@isManualReset
=
isManualReset
@state
=
:nonsignaled
@name
=
name
super
()
end
attr_reader
:name
attr_reader
:isSet
def
wait
(
mutex
)
@waiterThread
=
Thread
.
new
\
{
mutex
.
synchronize
\
{
if
(
:signaled
!=
@state
)
else
super
(
mutex
)
end
if
(
!
@isManualReset
)
@state
=
:nonsignaled
end
}
}
# Blocks the current thread until the waiter is woken by a signal.
@waiterThread
.
join
()
end
def
signal
(
mutex
)
super
()
mutex
.
synchronize
\
{
@state
=
:signaled
}
end
def
reset
(
mutex
)
mutex
.
synchronize
\
{
@state
=
:nonsignaled
}
end
end
class
Service
# @Theoretically we should only have one service instance for each test process.
include
Singleton
def
initialize
()
@isRunning
=
false
@mutex
=
Mutex
.
new
@serverStartEvent
=
Event
.
new
(
true
,
"startEvent"
)
end
attr_reader
:httpServer
attr_accessor
:isRunning
def
wakeThreadCallback
()
@config
[
:StartEvent
].
signal
(
@mutex
)
Thread
.
pass
()
end
def
start
(
httpPort
=
DEFAULT_PORT
)
if
(
false
==
@isRunning
)
@isRunning
=
true
@config
=
{
:Port
=>
httpPort
,
:StartCallback
=>
Proc
.
new
{
wakeThreadCallback
},
:StartEvent
=>
@serverStartEvent
,
:Mutex
=>
@mutex
}
@httpServer
=
WEBrick
::
HTTPServer
.
new
(
@config
)
# Start the HTTP server in a separate thread (otherwise it blocks) to let it
# process HTTP requests in the background while the test continues to execute.
@httpServerThread
=
Thread
.
new
\
{
Thread
.
pass
()
@httpServer
.
start
()
}
@serverStartEvent
.
wait
(
@mutex
)
@serverStartEvent
.
reset
(
@mutex
)
else
end
end
def
stop
()
@httpServer
.
shutdown
()
@httpServerThread
.
join
()
@isRunning
=
false
end
end
@service
=
Service
.
instance
()
@service
.
start
()
@service
.
stop
()
(1-1/1)
Loading...