/// <summary> /// Open the adequate stream to the server. /// </summary> /// <param name="client">TCP client to use to open the stream</param> /// <param name="settings">Settings to use when manipulating the stream</param> public CStreamServerIO(TcpClient client, CStreamServerSettings settings) : base(client, settings.LengthBufferSize) { Port = settings.Port; Settings = settings; if (settings.UseSsl) { // SSL stream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); int tmo = client.ReceiveTimeout * 1000; client.ReceiveTimeout = 5000; try { // authenticate the server but don't require the client to authenticate. sslStream.AuthenticateAsServer(settings.ServerCertificate); } catch (Exception ex) { CLog.AddException($"{MethodBase.GetCurrentMethod().Module.Name}.{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}", ex); sslStream = null; throw; } finally { client.ReceiveTimeout = tmo; } } else { // standard Stream networkStream = client.GetStream(); } }
public Client(Thread mainThread, CThread thread, TcpClient client, CStreamServerSettings settings) { Tcp = client; Settings = settings; StreamIO = new CStreamServerIO(client, Settings); MainThread = mainThread; Thread = thread; }
public static StartServerType Prepare(CStreamServerSettings settings, CThreadData threadData, CStreamDelegates.ServerOnRequestDelegate onRequest, CStreamDelegates.ServerOnStartDelegate onStart = null, CStreamDelegates.ServerOnConnectDelegate onConnect = null, CStreamDelegates.ServerOnStopDelegate onStop = null, object parameters = null) { return(new StartServerType() { ThreadData = threadData, Settings = settings, OnStart = onStart, OnConnect = onConnect, OnRequest = onRequest, OnStop = onStop, Parameters = parameters, }); }