public AsyncSocketSession(string remoteIp, Socket socket, IProcessor processor, SocketAwaitablePool socketAwaitablePool, BlockingBufferManager bufferManager) : base(remoteIp, processor) { this.socketAwaitablePool = socketAwaitablePool; this.bufferManager = bufferManager; Socket = socket; }
public SystemVariablesUpdater(IWorld world, ITribeManager tribeManager, IDbManager dbManager, IScheduler scheduler, IStrongholdManager strongholdManager, IForestManager forestManager, ISystemVariableManager systemVariableManager, INetworkServer networkServer, IChannel channel, BlockingBufferManager bufferManager, SocketAwaitablePool socketAwaitablePool) { this.world = world; this.tribeManager = tribeManager; this.dbManager = dbManager; this.scheduler = scheduler; this.strongholdManager = strongholdManager; this.forestManager = forestManager; this.systemVariableManager = systemVariableManager; this.networkServer = networkServer; this.channel = channel; this.bufferManager = bufferManager; this.socketAwaitablePool = socketAwaitablePool; if (!string.IsNullOrEmpty(Config.api_id)) { graphiteKeyPrefix = string.Format("servers.{0}_tribalhero_com.tribalhero.", Config.api_id); } }
public void TestInitializationUsingCountZero() { int size = 300; int count = 0; var manager = new BlockingBufferManager(size, count); }
private static void Run() { socketAwaitablePool = new SocketAwaitablePool(50); blockingBufferManager = new BlockingBufferManager(1000, 50); while (true) { try { var policySession = Connect(); policySession.SendAsyncImmediatelly(Encoding.UTF8.GetBytes("<policy-file-request/>\n")).Wait(); var newSession = Connect(); var loginPacket = new Packet(Command.Login); loginPacket.AddInt16(0); // version loginPacket.AddInt16(0); // revision loginPacket.AddByte(0); loginPacket.AddString("1234"); loginPacket.AddString(""); newSession.SendAsyncImmediatelly(loginPacket.GetBytes()).Wait(); policySession.Socket.Shutdown(SocketShutdown.Both); policySession.Socket.Close(); newSession.Socket.Shutdown(SocketShutdown.Both); newSession.Socket.Close(); } catch (Exception) { } } }
public AsyncSocketConnectionHelper(int bufferSize = 1000, int bufferCount = 15) { listener = new TcpListener(IPAddress.Loopback, 0); SocketAwaitablePool = new SocketAwaitablePool(bufferCount); BlockingBufferManager = new BlockingBufferManager(bufferSize, bufferCount); listener.Start(); }
public void TestDisposingBeforeGettingBuffer() { var count = 4000; var manager = new BlockingBufferManager(300, count); manager.Dispose(); manager.GetBuffer(); }
public void TestInitialization() { int size = 300; int count = 4000; var manager = new BlockingBufferManager(size, count); Assert.AreEqual(manager.BufferSize, size); Assert.AreEqual(manager.AvailableBuffers, count); }
public RiakOnTheFlyConnection(IRiakNodeConfiguration nodeConfig, int bufferPoolSize = 20) { _nodeConfig = nodeConfig; _serverUrl = @"{0}://{1}:{2}".Fmt(nodeConfig.RestScheme, nodeConfig.HostAddress, nodeConfig.RestPort); _pool = new SocketAwaitablePool(nodeConfig.PoolSize); _bufferManager = new BlockingBufferManager(nodeConfig.BufferSize, bufferPoolSize); _resources = new BlockingLimitedList <RiakPbcSocket>(bufferPoolSize); }
public void TestDisposingBeforeReleasingBuffer() { var count = 4000; var manager = new BlockingBufferManager(300, count); var buffer = manager.GetBuffer(); manager.Dispose(); manager.ReleaseBuffer(buffer); }
public void TestDisposingWhileGettingBuffer() { var manager = new BlockingBufferManager(300, 1); // Take the only buffer. manager.GetBuffer(); // Dispose after one second. Task.Delay(1000).ContinueWith(t => manager.Dispose()); // Wait for a buffer to become available. manager.GetBuffer(); }
public RiakPbcSocket(string server, int port, int receiveTimeout, int sendTimeout, int idleTimeout, SocketAwaitablePool socketAwaitablePool, BlockingBufferManager blockingBufferManager, int receiveBufferSize = 8192, int sendBufferSize = 8192, int socketConnectAttempts = 3) { _endPoint = new DnsEndPoint(server, port); _receiveTimeout = receiveTimeout; _sendTimeout = sendTimeout; _idleTimeout = new TimeSpan(0, 0, 0, 0, idleTimeout); _socketAwaitablePool = socketAwaitablePool; _blockingBufferManager = blockingBufferManager; _receiveBufferSize = receiveBufferSize; _sendBufferSize = sendBufferSize; _socketConnectAttempts = socketConnectAttempts; _socket = null; }
public RiakConnectionPool(IRiakNodeConfiguration nodeConfig) { _hostAddress = nodeConfig.HostAddress; _poolSize = nodeConfig.PoolSize; _pool = new SocketAwaitablePool(_poolSize); _bufferSize = nodeConfig.BufferSize; _restScheme = nodeConfig.RestScheme; _restPort = nodeConfig.RestPort; _pbcPort = nodeConfig.PbcPort; _networkReadTimeout = nodeConfig.NetworkReadTimeout; _networkWriteTimeout = nodeConfig.NetworkWriteTimeout; _idleTimeout = nodeConfig.IdleTimeout; _blockingBufferManager = new BlockingBufferManager(_bufferSize, _poolSize); _serverUrl = @"{0}://{1}:{2}".Fmt(_restScheme, _hostAddress, _restPort); Init(); }
public void TestTakingAndReleasing() { var count = 4000; var manager = new BlockingBufferManager(300, count); // Take all buffers. var buffers = new ArraySegment<byte>[count]; Parallel.For(0, count, i => buffers[i] = manager.GetBuffer()); Assert.AreEqual(manager.AvailableBuffers, 0); // Start releasing every buffer after one second. Task.Delay(1000).ContinueWith(t => Parallel.For(0, count, i => manager.ReleaseBuffer(buffers[i]))); Assert.AreEqual(manager.AvailableBuffers, 0); // Take buffers as they become available, block the thread as needed. var buffers2 = new ArraySegment<byte>[count]; Parallel.For(0, count, i => buffers2[i] = manager.GetBuffer()); Assert.AreEqual(manager.AvailableBuffers, 0); }
public void TestTakingAndReleasing() { var count = 4000; var manager = new BlockingBufferManager(300, count); // Take all buffers. var buffers = new ArraySegment <byte> [count]; Parallel.For(0, count, i => buffers[i] = manager.GetBuffer()); Assert.AreEqual(manager.AvailableBuffers, 0); // Start releasing every buffer after one second. Task.Delay(1000).ContinueWith(t => Parallel.For(0, count, i => manager.ReleaseBuffer(buffers[i]))); Assert.AreEqual(manager.AvailableBuffers, 0); // Take buffers as they become available, block the thread as needed. var buffers2 = new ArraySegment <byte> [count]; Parallel.For(0, count, i => buffers2[i] = manager.GetBuffer()); Assert.AreEqual(manager.AvailableBuffers, 0); }
public async Task ServerIsAbleToProcessPacketsAndCleansUpResources(ISocketSessionFactory sessionFactory, IProcessor processor, IPlayer player) { player.GetCityCount().Returns(1); player.HasTwoFactorAuthenticated = DateTime.Now; var socketAwaitablePool = new SocketAwaitablePool(10); var buffer = new BlockingBufferManager(1000, 15); Socket serverSideSocket = null; AsyncSocketSession session = null; sessionFactory.CreateAsyncSocketSession(Arg.Any <string>(), Arg.Any <Socket>()) .Returns(args => { serverSideSocket = args.Arg <Socket>(); session = new AsyncSocketSession(string.Empty, serverSideSocket, processor, socketAwaitablePool, buffer) { Player = player }; return(session); }); AsyncTcpServer server = new AsyncTcpServer(sessionFactory, socketAwaitablePool, buffer); try { server.Start("127.0.0.1", 0); // Connect and verify client connected and socket options are set var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { NoDelay = true }; var packetToSend1 = new Packet(Command.MarketSell); packetToSend1.AddString("Hello"); var bytesToSendOnConnect = packetToSend1.GetBytes(); await socket.ConnectAsync(new SocketAwaitable { RemoteEndPoint = server.LocalEndPoint }); await Task.Delay(1000); await socket.SendAsync(new SocketAwaitable { Buffer = new ArraySegment <byte>(bytesToSendOnConnect, 0, bytesToSendOnConnect.Length) }); await Task.Delay(1000); server.GetSessionCount().Should().Be(1); serverSideSocket.Connected.Should().BeTrue(); serverSideSocket.NoDelay.Should().BeTrue(); serverSideSocket.SendTimeout.Should().Be(1000); // Send packets and verify server processes packets var packetToSend2 = new Packet(Command.MarketBuy); packetToSend2.AddString("World"); var bytesToSecondAfterConnect = packetToSend2.GetBytes(); await socket.SendAsync(new SocketAwaitable { Buffer = new ArraySegment <byte>(bytesToSecondAfterConnect, 0, bytesToSecondAfterConnect.Length) }); await Task.Delay(1000); // Stop server and verify it disconnect and releases resources server.Stop(); await Task.Delay(1000); player.HasTwoFactorAuthenticated.Should().Be(null); serverSideSocket.Connected.Should().BeFalse(); socketAwaitablePool.Count.Should().Be(10); buffer.AvailableBuffers.Should().Be(15); processor.Received(1).Execute(session, Arg.Is <Packet>(packet => packet.GetBytes().SequenceEqual(bytesToSecondAfterConnect))); processor.Received(1).Execute(session, Arg.Is <Packet>(packet => packet.GetBytes().SequenceEqual(bytesToSendOnConnect))); processor.Received(1).ExecuteEvent(session, Arg.Is <Packet>(packet => packet.Cmd == Command.OnDisconnect)); } finally { server.Stop(); } }
public AsyncTcpServer(ISocketSessionFactory socketSessionFactory, SocketAwaitablePool socketAwaitablePool, BlockingBufferManager bufferManager) { this.socketSessionFactory = socketSessionFactory; this.socketAwaitablePool = socketAwaitablePool; this.bufferManager = bufferManager; }