private void sendAssemblyToPeer(string address, object state)
{
const int buffSize = 4096;
var uploadBuffer = new byte[buffSize];
var theOrganism = (TeleportState)state;
var assemblyName = ((Species)theOrganism.OrganismState.Species).AssemblyInfo.FullName;
byte[] assemblyBuf;
var req = checkToSeeIfPeerHasThisAssembly(address, assemblyName, out assemblyBuf);
writeAssemblyNameToRequest(req, assemblyBuf);
var assemblyVersionResponse = getAssemblyVersionResponse(req);
sendAssemblyIfNecessary(buffSize, state, address, assemblyVersionResponse, uploadBuffer);
req = sendObjectState(state, address);
var response = sendRequest(req);
_engine.WriteProtocolInfo("sendAssemblyToPeer: Organism state sent.");
// Look for <organismArrived>false</organismArrived>, because that means the organism
// didn't make it and should be teleported locally
if (NetworkEngine.GetValueFromContent("<organismArrived>", "</organismArrived>", response) == "false")
{
var errorMessage = "The organism didn't arrive on their side for some reason.";
if (NetworkEngine.GetValueFromContent("<reason>", "</reason>", response) != null)
{
errorMessage = "The organism didn't arrive on the remote peer. " +
NetworkEngine.GetValueFromContent("<reason>", "</reason>", response);
}
throw new AbortPeerDiscussionException(errorMessage);
}
return;
}