options.go (104 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package getty import ( gxsync "github.com/dubbogo/gost/sync" ) type ServerOption func(*ServerOptions) type ServerOptions struct { addr string // tls sslEnabled bool tlsConfigBuilder TlsConfigBuilder // websocket path string cert string privateKey string caCert string // task queue tPool gxsync.GenericTaskPool } // WithLocalAddress @addr server listen address. func WithLocalAddress(addr string) ServerOption { return func(o *ServerOptions) { o.addr = addr } } // WithWebsocketServerPath @path: websocket request url path func WithWebsocketServerPath(path string) ServerOption { return func(o *ServerOptions) { o.path = path } } // WithWebsocketServerCert @cert: server certificate file func WithWebsocketServerCert(cert string) ServerOption { return func(o *ServerOptions) { o.cert = cert } } // WithWebsocketServerPrivateKey @key: server private key(contains its public key) func WithWebsocketServerPrivateKey(key string) ServerOption { return func(o *ServerOptions) { o.privateKey = key } } // WithWebsocketServerRootCert @cert is the root certificate file to verify the legitimacy of server func WithWebsocketServerRootCert(cert string) ServerOption { return func(o *ServerOptions) { o.caCert = cert } } // WithServerTaskPool @pool server task pool. func WithServerTaskPool(pool gxsync.GenericTaskPool) ServerOption { return func(o *ServerOptions) { o.tPool = pool } } // WithServerSslEnabled enable use tls func WithServerSslEnabled(sslEnabled bool) ServerOption { return func(o *ServerOptions) { o.sslEnabled = sslEnabled } } // WithServerTlsConfigBuilder sslConfig is tls config func WithServerTlsConfigBuilder(tlsConfigBuilder TlsConfigBuilder) ServerOption { return func(o *ServerOptions) { o.tlsConfigBuilder = tlsConfigBuilder } } ///////////////////////////////////////// // Client Options ///////////////////////////////////////// type ClientOption func(*ClientOptions) type ClientOptions struct { addr string number int reconnectInterval int // reConnect Interval // tls sslEnabled bool tlsConfigBuilder TlsConfigBuilder // the cert file of wss server which may contain server domain, server ip, the starting effective date, effective // duration, the hash alg, the len of the private key. // wss client will use it. cert string // task queue tPool gxsync.GenericTaskPool } // WithServerAddress @addr is server address. func WithServerAddress(addr string) ClientOption { return func(o *ClientOptions) { o.addr = addr } } // WithReconnectInterval @reconnectInterval is server address. func WithReconnectInterval(reconnectInterval int) ClientOption { return func(o *ClientOptions) { if 0 < reconnectInterval { o.reconnectInterval = reconnectInterval } } } // WithClientTaskPool @pool client task pool. func WithClientTaskPool(pool gxsync.GenericTaskPool) ClientOption { return func(o *ClientOptions) { o.tPool = pool } } // WithConnectionNumber @num is connection number. func WithConnectionNumber(num int) ClientOption { return func(o *ClientOptions) { if 0 < num { o.number = num } } } // WithRootCertificateFile @certs is client certificate file. it can be empty. func WithRootCertificateFile(cert string) ClientOption { return func(o *ClientOptions) { o.cert = cert } } // WithClientSslEnabled enable use tls func WithClientSslEnabled(sslEnabled bool) ClientOption { return func(o *ClientOptions) { o.sslEnabled = sslEnabled } } // WithClientTlsConfigBuilder sslConfig is tls config func WithClientTlsConfigBuilder(tlsConfigBuilder TlsConfigBuilder) ClientOption { return func(o *ClientOptions) { o.tlsConfigBuilder = tlsConfigBuilder } }