High performance socket based IConnectionProvider.

Potential memory usage is dependent on a number of parameters: Each connection maintains a receive buffer with a size potential of NetworkConnection.MaxMessageSize. MaxConnections (set from constructor) determines the max number of connections on the individual NetworkConnectionProvider. NetworkConnection.SendBufferLimit determines how many send buffers (globally) can be created (both clients and servers both), with each having a size potential of NetworkConnection.MaxMessageSize.

Inheritance: IConnectionProvider
Ejemplo n.º 1
0
        internal NetworkServerConnection(IEnumerable<string> signatureHashAlgs, IEnumerable<Protocol> protocols, Socket reliableSocket, NetworkConnectionProvider provider)
            : base(protocols, provider.pkCryptoFactory, null, false)
        {
            if (signatureHashAlgs == null)
                throw new ArgumentNullException ("signatureHashAlgs");
            if (reliableSocket == null)
                throw new ArgumentNullException ("reliableSocket");
            if (provider == null)
                throw new ArgumentNullException ("provider");

            this.signatureHashAlgs = signatureHashAlgs;
            this.provider = provider;

            RemoteEndPoint = reliableSocket.RemoteEndPoint;

            this.reliableSocket = reliableSocket;

            var asyncArgs = new SocketAsyncEventArgs();
            asyncArgs.UserToken = this;
            asyncArgs.SetBuffer (this.rmessageBuffer, 0, 20480);
            asyncArgs.Completed += ReliableReceiveCompleted;

            int p = Interlocked.Increment (ref this.pendingAsync);
            Trace.WriteLineIf (NTrace.TraceVerbose, String.Format ("Increment pending: {0}", p), "new NetworkServerConnection:" + connectionId);

            this.rreader = new BufferValueReader (this.rmessageBuffer);

            if (!this.reliableSocket.ReceiveAsync (asyncArgs))
                ReliableReceiveCompleted (this, asyncArgs);
        }
Ejemplo n.º 2
0
        public static ScreenshareServer StartNew()
        {
            // NetworkConnectionProvider requires that you tell it what local target to listen
            // to and the maximum number of connections you'll allow.
            var provider = new NetworkConnectionProvider(ScreenshareProtocol.Instance, new Target(Target.AnyIP, 58291), 10);

            var server = new ScreenshareServer(provider);
            server.Start();
            return server;
        }
Ejemplo n.º 3
0
        public void RejectSha1()
        {
            TearDown();

            provider = new NetworkConnectionProvider (new [] { MockProtocol.Instance }, (IPEndPoint)EndPoint, MaxConnections, () => new RSACrypto(), new string[] { "SHA256" } );
            provider.Start (MessageTypes);

            var test = new AsyncTest<DisconnectedEventArgs> (d => Assert.AreEqual (ConnectionResult.FailedHandshake, d.Result));

            var client = new NetworkClientConnection (new[] { MockProtocol.Instance }, () => new MockSha1OnlyCrypto());
            client.ConnectAsync (EndPoint, MessageTypes);

            client.Connected += test.FailHandler;
            client.Disconnected += test.PassHandler;

            test.Assert (10000);
        }
Ejemplo n.º 4
0
        internal NetworkServerConnection(IEnumerable <string> signatureHashAlgs, IEnumerable <Protocol> protocols, Socket reliableSocket, NetworkConnectionProvider provider)
            : base(protocols, null, false)
        {
            if (signatureHashAlgs == null)
            {
                throw new ArgumentNullException("signatureHashAlgs");
            }
            if (reliableSocket == null)
            {
                throw new ArgumentNullException("reliableSocket");
            }
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            this.signatureHashAlgs = signatureHashAlgs;
            this.provider          = provider;

            RemoteTarget = reliableSocket.RemoteEndPoint.ToTarget();

            this.reliableSocket = reliableSocket;

            var asyncArgs = new SocketAsyncEventArgs();

            asyncArgs.UserToken = this;
            asyncArgs.SetBuffer(this.rmessageBuffer, 0, 20480);
            asyncArgs.Completed += ReliableReceiveCompleted;

            int p = Interlocked.Increment(ref this.pendingAsync);

            Trace.WriteLineIf(NTrace.TraceVerbose, String.Format("Increment pending: {0}", p), "new NetworkServerConnection:" + connectionId);

            this.rreader = new BufferValueReader(this.rmessageBuffer);

            this.serializer = new ServerMessageSerializer(this, protocols);

            if (!this.reliableSocket.ReceiveAsync(asyncArgs))
            {
                ReliableReceiveCompleted(this, asyncArgs);
            }
        }