mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
net.websocket: swap unsafe use of nil for a safe default value (#15836)
This commit is contained in:
parent
41dbd12bc4
commit
27305d1a5f
@ -165,6 +165,7 @@ pub fn new_test_session(_vargs string, will_compile bool) TestSession {
|
|||||||
skip_files << 'examples/websocket/ping.v' // requires OpenSSL
|
skip_files << 'examples/websocket/ping.v' // requires OpenSSL
|
||||||
skip_files << 'examples/websocket/client-server/client.v' // requires OpenSSL
|
skip_files << 'examples/websocket/client-server/client.v' // requires OpenSSL
|
||||||
skip_files << 'examples/websocket/client-server/server.v' // requires OpenSSL
|
skip_files << 'examples/websocket/client-server/server.v' // requires OpenSSL
|
||||||
|
skip_files << 'vlib/v/tests/websocket_logger_interface_should_compile_test.v' // requires OpenSSL
|
||||||
skip_files << 'examples/vweb_orm_jwt' // requires mysql
|
skip_files << 'examples/vweb_orm_jwt' // requires mysql
|
||||||
$if tinyc {
|
$if tinyc {
|
||||||
skip_files << 'examples/database/orm.v' // try fix it
|
skip_files << 'examples/database/orm.v' // try fix it
|
||||||
|
@ -135,9 +135,11 @@ const (
|
|||||||
'vlib/net/websocket/websocket_test.v',
|
'vlib/net/websocket/websocket_test.v',
|
||||||
'vlib/crypto/rand/crypto_rand_read_test.v',
|
'vlib/crypto/rand/crypto_rand_read_test.v',
|
||||||
'vlib/net/smtp/smtp_test.v',
|
'vlib/net/smtp/smtp_test.v',
|
||||||
|
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
|
||||||
]
|
]
|
||||||
skip_with_fsanitize_address = [
|
skip_with_fsanitize_address = [
|
||||||
'vlib/net/websocket/websocket_test.v',
|
'vlib/net/websocket/websocket_test.v',
|
||||||
|
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
|
||||||
]
|
]
|
||||||
skip_with_fsanitize_undefined = [
|
skip_with_fsanitize_undefined = [
|
||||||
'do_not_remove',
|
'do_not_remove',
|
||||||
@ -184,6 +186,7 @@ const (
|
|||||||
'vlib/net/http/response_test.v',
|
'vlib/net/http/response_test.v',
|
||||||
'vlib/builtin/js/array_test.js.v',
|
'vlib/builtin/js/array_test.js.v',
|
||||||
'vlib/net/smtp/smtp_test.v',
|
'vlib/net/smtp/smtp_test.v',
|
||||||
|
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
|
||||||
]
|
]
|
||||||
skip_on_linux = [
|
skip_on_linux = [
|
||||||
'do_not_remove',
|
'do_not_remove',
|
||||||
@ -214,6 +217,7 @@ const (
|
|||||||
'vlib/sync/many_times_test.v',
|
'vlib/sync/many_times_test.v',
|
||||||
'vlib/sync/once_test.v',
|
'vlib/sync/once_test.v',
|
||||||
'vlib/net/smtp/smtp_test.v',
|
'vlib/net/smtp/smtp_test.v',
|
||||||
|
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
|
||||||
]
|
]
|
||||||
skip_on_non_windows = [
|
skip_on_non_windows = [
|
||||||
'do_not_remove',
|
'do_not_remove',
|
||||||
|
@ -36,11 +36,14 @@ pub mut:
|
|||||||
header http.Header // headers that will be passed when connecting
|
header http.Header // headers that will be passed when connecting
|
||||||
conn &net.TcpConn = unsafe { nil } // underlying TCP socket connection
|
conn &net.TcpConn = unsafe { nil } // underlying TCP socket connection
|
||||||
nonce_size int = 16 // size of nounce used for masking
|
nonce_size int = 16 // size of nounce used for masking
|
||||||
panic_on_callback bool // set to true of callbacks can panic
|
panic_on_callback bool // set to true of callbacks can panic
|
||||||
state State // current state of connection
|
state State // current state of connection
|
||||||
logger &log.Logger = unsafe { nil } // logger used to log messages
|
// logger used to log messages
|
||||||
resource_name string // name of current resource
|
logger &log.Logger = &log.Logger(&log.Log{
|
||||||
last_pong_ut i64 // last time in unix time we got a pong message
|
level: .info
|
||||||
|
})
|
||||||
|
resource_name string // name of current resource
|
||||||
|
last_pong_ut i64 // last time in unix time we got a pong message
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flag represents different types of headers in websocket handshake
|
// Flag represents different types of headers in websocket handshake
|
||||||
|
@ -9,7 +9,9 @@ import rand
|
|||||||
// Server represents a websocket server connection
|
// Server represents a websocket server connection
|
||||||
pub struct Server {
|
pub struct Server {
|
||||||
mut:
|
mut:
|
||||||
logger &log.Logger = unsafe { nil } // logger used to log
|
logger &log.Logger = &log.Logger(&log.Log{
|
||||||
|
level: .info
|
||||||
|
})
|
||||||
ls &net.TcpListener = unsafe { nil } // listener used to get incoming connection to socket
|
ls &net.TcpListener = unsafe { nil } // listener used to get incoming connection to socket
|
||||||
accept_client_callbacks []AcceptClientFn // accept client callback functions
|
accept_client_callbacks []AcceptClientFn // accept client callback functions
|
||||||
message_callbacks []MessageEventHandler // new message callback functions
|
message_callbacks []MessageEventHandler // new message callback functions
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
import net.websocket as ws
|
||||||
|
|
||||||
|
pub type RawMessage = ws.Message
|
||||||
|
|
||||||
|
pub struct WsTransport {
|
||||||
|
pub mut:
|
||||||
|
ws ws.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
struct WsClient {
|
||||||
|
pub mut:
|
||||||
|
transport Transport
|
||||||
|
}
|
||||||
|
|
||||||
|
pub interface Transport {
|
||||||
|
send()
|
||||||
|
wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (wst WsTransport) send() {
|
||||||
|
println('send is called')
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (wst WsTransport) wait() {
|
||||||
|
println('wait is called')
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_ws_client(transport Transport) ?WsClient {
|
||||||
|
return WsClient{
|
||||||
|
transport: transport
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn server() ? {
|
||||||
|
mut s := ws.new_server(.ip6, 8081, '/')
|
||||||
|
|
||||||
|
s.on_connect(fn (mut s ws.ServerClient) ?bool {
|
||||||
|
if s.resource_name != '/' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
println('Client has connected...')
|
||||||
|
return true
|
||||||
|
})?
|
||||||
|
|
||||||
|
s.on_message(fn (mut ws ws.Client, msg &RawMessage) ? {
|
||||||
|
mut transport := WsTransport{}
|
||||||
|
mut ws_client := new_ws_client(transport)?
|
||||||
|
_ := ws_client
|
||||||
|
})
|
||||||
|
|
||||||
|
s.on_close(fn (mut ws ws.Client, code int, reason string) ? {
|
||||||
|
println('client ($ws.id) closed connection')
|
||||||
|
})
|
||||||
|
|
||||||
|
s.listen() or { println('error on server listen: $err') }
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
s.free()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn abc() ? {
|
||||||
|
server()?
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_compilation_of_the_example_code_in_issue_15839() {
|
||||||
|
assert true
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user