/// <summary> /// Create new instance /// </summary> /// <param name="socket"></param> /// <param name="maxSizeSettings"></param> public ServerSessionBase(Socket socket, MaxSizeSettings maxSizeSettings) { this.socket = socket; this.maxSizeSettings = maxSizeSettings; serverBufferSize = BufferSizeUtils.ServerBufferSize(maxSizeSettings); messageManager = new NetworkSender(serverBufferSize); bytesRead = 0; }
public ServerSessionBase(Socket socket, FasterKV <Key, Value> store, Functions functions, ParameterSerializer serializer, MaxSizeSettings maxSizeSettings) { this.socket = socket; session = store.For(new ServerFunctions <Key, Value, Input, Output, Functions, ParameterSerializer>(functions, this)).NewSession <ServerFunctions <Key, Value, Input, Output, Functions, ParameterSerializer> >(); this.maxSizeSettings = maxSizeSettings; serverBufferSize = BufferSizeUtils.ServerBufferSize(maxSizeSettings); messageManager = new NetworkSender(serverBufferSize); this.serializer = serializer; bytesRead = 0; }
/// <summary> /// /// </summary> /// <param name="address"></param> /// <param name="port"></param> /// <param name="networkBufferSize"></param> public FasterServerBase(string address, int port, int networkBufferSize) { this.address = address; this.port = port; this.networkBufferSize = networkBufferSize; if (networkBufferSize == default) { this.networkBufferSize = BufferSizeUtils.ClientBufferSize(new MaxSizeSettings()); } activeSessions = new ConcurrentDictionary <IMessageConsumer, byte>(); sessionProviders = new ConcurrentDictionary <WireFormat, ISessionProvider>(); activeSessionCount = 0; Disposed = false; }
/// <summary> /// Constructor /// </summary> /// <param name="address">IP address</param> /// <param name="port">Port</param> /// <param name="networkBufferSize">Size of network buffer</param> public FasterServer(string address, int port, int networkBufferSize = default) { activeSessions = new ConcurrentDictionary <IServerSession, byte>(); sessionProviders = new ConcurrentDictionary <WireFormat, ISessionProvider>(); activeSessionCount = 0; disposed = false; this.networkBufferSize = networkBufferSize; if (networkBufferSize == default) { this.networkBufferSize = BufferSizeUtils.ClientBufferSize(new MaxSizeSettings()); } var ip = IPAddress.Parse(address); var endPoint = new IPEndPoint(ip, port); servSocket = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); servSocket.Bind(endPoint); servSocket.Listen(512); acceptEventArg = new SocketAsyncEventArgs(); acceptEventArg.Completed += AcceptEventArg_Completed; }
private bool HandleNewConnection(SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success) { e.Dispose(); return(false); } // Ok to create new event args on accept because we assume a connection to be long-running var receiveEventArgs = new SocketAsyncEventArgs(); var bufferSize = BufferSizeUtils.ClientBufferSize(maxSizeSettings); var buffer = new byte[bufferSize]; receiveEventArgs.SetBuffer(buffer, 0, bufferSize); var(store, functionsGen, serializer) = ((FasterKV <Key, Value>, Func <WireFormat, Functions>, ParameterSerializer))e.UserToken; var args = new ConnectionArgs <Key, Value, Input, Output, Functions, ParameterSerializer> { socket = e.AcceptSocket, store = store, functionsGen = functionsGen, serializer = serializer, maxSizeSettings = maxSizeSettings }; receiveEventArgs.UserToken = args; receiveEventArgs.Completed += RecvEventArg_Completed; e.AcceptSocket.NoDelay = true; // If the client already have packets, avoid handling it here on the handler so we don't block future accepts. if (!e.AcceptSocket.ReceiveAsync(receiveEventArgs)) { Task.Run(() => RecvEventArg_Completed(null, receiveEventArgs)); } return(true); }