Null Entry in IOverviewEntry in 17.02.17

In the API explorer I can see lots of list entries for my overview but the property in Visual studio seems to contain Null.
Did I make a mistake?

Here is a more concise understanding of my problem.

In this gif I have the meamurymeasurement object stored in variable named measure. I’ve set a breakpoint at runtime so I can explore the contents of the memory measurement object yet the Entry member is null. Lets have a look at Sanderling.exe API explorer.

It Works in the API explorer. That meamorymeasurement contains all the information I need for my bot to understand the overview. Without my bot understanting the overview I will struggle to defeat pirates and escape from hostile players.
Does anybody understand why my memorymeasurement object contains null for the Entry member?

1 Like

Welcome Scotty,
so far I do not see anything wrong with this approach.

There were changes recently in the area of reading list entries (which is required for overview entries) and an adaption to changes in the eve online client was applied with commit 9d2d0ded4822f7090cb4d840dcf8ea59fbaeb6b4 to make this work again.

Therefore I suggest you get the source for the latest commit ceb52667084a056835e43b0cba70a76897784c1d and then ‘Rebuild All’ in Visual Studio.

In case you still see the issue then, place a breakpoint on this line: https://github.com/Arcitectus/Sanderling/blob/master/src/Sanderling/Sanderling.MemoryReading/Production/MemoryMeasurement/SictGbs/ScrollReader.cs#L36
to see if this code path is used for the reading of list entries.

Thank you very much for your reply!

I have obtained the latest commit and built it.
However when I try to use these assemblies in my project it appears the instance of SensorServerDispatcher object no longer contains the MeasurementTakeNewRequest() Method. Is there a new way I should be getting the MemoryMeasurement.Value?

Yes, instead of looking into SensorServerDispatcher, I recommend to use the same path as is now used in the project which emits the executable, going over the MeasurementTakeNewRequest method there.

This way you will obtain the same value that the executable build from this project shows you in the API-Explorer.

Thanks again. I’ve been looking at the source for the executable for a few hours now and I can’t quite wrap my head around it. I’ve set breakpoints and stepped through at the programs connects to my eve client but the meaning of a lot of code isn’t plain to me as I’ve only been coding for 6 months on the side. Can you see why in my code MeasurementTakeNewRequest never returns anything?

static Sanderling.Parse.MemoryMeasurement ConnectToEveInstance()
{
Sanderling.SimpleInterfaceServerDispatcher sensorServerDispatcher = new Sanderling.SimpleInterfaceServerDispatcher();
Sensor NewSensor = new Sensor();

  	sensorServerDispatcher.LicenseClientConfig = ExeConfig.LicenseClientDefault;
  	sensorServerDispatcher.CyclicExchangeStart();
  	var exchangeAuth = sensorServerDispatcher?.LicenseClient?.ExchangeAuthLast?.Value;
  	Console.WriteLine("Auth exchange completed ");
  	if (exchangeAuth.AuthSuccess() ?? false)
  		Console.WriteLine("successful");
  	else
  	{
  		Console.WriteLine("error");
  		//return;
  	}
  	var response = NewSensor.MeasurementTakeNewRequest(eveOnlineProcessId);
  	for (int i = 0; i < 35; i++)
  	{
  		response = NewSensor.MeasurementTakeNewRequest(eveOnlineProcessId);
  		if (null == response.MemoryMeasurement)
  			Console.WriteLine("I have no idea what's going on");
  		else
  		{
  			Console.WriteLine("I must have an idea it returned something");
  			break;
  		}
  		Thread.Sleep(500);
  	}
  	var Measurement = response.MemoryMeasurement.Value.Parse();
  	return (Sanderling.Parse.MemoryMeasurement)Measurement;
  }

Is this the code you wanted me to look at?

void MeasurementMemoryTake(int processId, Int64 measurementBeginTimeMinMilli)
{

  	var MeasurementRaw = sensor.MeasurementTake(processId, measurementBeginTimeMinMilli);
  	if (null == MeasurementRaw)
  		return;
  	MemoryMeasurementLast = MeasurementRaw?.MapValue(value => new Interface.MemoryMeasurementEvaluation(
  		MeasurementRaw,
  		MemoryMeasurementLast?.Value?.MemoryMeasurementAccumulation as Accumulator.MemoryMeasurementAccumulator));
  }

My instance of sensor always returns 4 null objects from the MeasurementTakeNewRequest method.

my last approach

var Result = NewSensor.MeasurementTakeNewRequest(eveOnlineProcessId);
for (int i = 0; i < 30; i++)
{
Result = NewSensor.MeasurementTakeNewRequest(eveOnlineProcessId);
Thread.Sleep(1000);
Console.WriteLine(i);
if (Result.MemoryMeasurement != null)
{
break;
}
}
//On line 1 I make sure my var Result holds the correct type
//Then I start a for loop to run 30 times, it will exit after 30seconds unless I get a non-null object
//returned by NewSensor.MeasurementTakeNewRequest. As you can guess NewSensor is an object of
//Type Sensor.

Do I need to do the license config stuff differently in the new version?
Is sensorServerDispatcher.CyclicExchangeStart(); still the right way to engage the license?

Your continued assistance will be appreciated fully.

That is a lot of code you posted and I am not sure where this is coming from.
I do not see any reason anymore to use SimpleInterfaceServerDispatcher as it should be obsolete with the more recent changes of the memory reading setup in the application.

I will create a VS project to demonstrate the setup for memory reading.

If you do that that would be a huge help to me and answer a lot of my questions.

This is now completed.

I added a demonstration of the memory reading setup in a simple console application, see +Add app demonstrating eve online memory reading setup. · Arcitectus/Sanderling@9083b22 · GitHub

Thank you so much man. I’ll have a look at it right now.

i seem to have found the issue. When I call sensor?.MeasurementTakeNewRequest(eveOnlineProcessId) in my program the method instantly returns an object with 4 null objects. It is supposed to take 15 seconds or so before the method returns. I wonder why in my program in returns instantly.
The sample helped me a lot in isolating the the issue thanks!

Which is the first method in the call tree from MeasurementTakeNewRequest which gets called in the demo project but not in your program?