private void ReceiveDataCallback(IAsyncResult asyncResult) { ConnectionParam connectionParam = (ConnectionParam)asyncResult.AsyncState; try { SocketError error; Socket sender = connectionParam.Socket; int msgSize = sender.EndReceive(asyncResult, out error); if (error == SocketError.Success) { byte[] incomingData = new byte[msgSize]; Array.Copy(connectionParam.Context, incomingData, msgSize); ApiManager manager = new ApiManager(); manager.GetRooting().RouteRequests(connectionParam); //add API logic } } catch (Exception e) { Console.WriteLine("Error while receiving message : " + e.Message); } finally { var status = IsConnected(connectionParam.Socket); if (status) { connectionParam.Socket.BeginReceive(connectionParam.Context, 0, connectionParam.Context.Length , SocketFlags.None, ReceiveDataCallback, connectionParam); } else { Console.WriteLine("Deconectarea socketului:" + connectionParam.Address); connectionParam.Socket.Close(); //Added ConnectionStorage ConnectionStorage.GetInstance().ExcludeConnection(connectionParam); } } }
private void AcceptConnectionCallback(IAsyncResult result) { try { ConnectionParam connection = new ConnectionParam(); connection.Socket = _socket.EndAccept(result); connection.Address = connection.Socket.RemoteEndPoint.ToString(); connection.Socket.BeginReceive(connection.Context, 0, connection.Context.Length , 0, ReceiveDataCallback, connection); } catch (Exception e) { Console.WriteLine("Error while accepting data" + e.Message); } finally { AcceptConnection(); } }