public static void Load(OMV.GridClient netComm, CommLLLP worldComm) { LogManager.Log.Log(LogLevel.DCOMM, "LoadWorldObjects: loading existing context"); List<OMV.Simulator> simsToLoad = new List<OMV.Simulator>(); lock (netComm.Network.Simulators) { foreach (OMV.Simulator sim in netComm.Network.Simulators) { if (WeDontKnowAboutThisSimulator(sim, netComm, worldComm)) { // tell the world about this simulator LogManager.Log.Log(LogLevel.DCOMMDETAIL, "LoadWorldObjects: adding simulator {0}", sim.Name); worldComm.Network_SimConnected(netComm, new OMV.SimConnectedEventArgs(sim)); simsToLoad.Add(sim); } } } Object[] loadParams = { simsToLoad, netComm, worldComm }; ThreadPool.QueueUserWorkItem(LoadSims, loadParams); // ThreadPool.UnsafeQueueUserWorkItem(LoadSims, loadParams); LogManager.Log.Log(LogLevel.DCOMM, "LoadWorldObjects: started thread to load sim objects"); }
private static void AddObjects(OMV.Simulator sim, OMV.GridClient netComm, CommLLLP worldComm) { LogManager.Log.Log(LogLevel.DCOMM, "LoadWorldObjects: loading {0} primitives", sim.ObjectsPrimitives.Count); List<OMV.Primitive> primsToNew = new List<OpenMetaverse.Primitive>(); sim.ObjectsPrimitives.ForEach(delegate(OMV.Primitive prim) { primsToNew.Add(prim); }); foreach (OMV.Primitive prim in primsToNew) { // TODO: how can we tell if this prim might be an attachment? worldComm.Objects_ObjectUpdate(netComm, new OpenMetaverse.PrimEventArgs(sim, prim, 0, true, false)); } }
private static void AddAvatars(OMV.Simulator sim, OMV.GridClient netComm, CommLLLP worldComm) { LogManager.Log.Log(LogLevel.DCOMM, "LoadWorldObjects: loading {0} avatars", sim.ObjectsAvatars.Count); List<OMV.Avatar> avatarsToNew = new List<OpenMetaverse.Avatar>(); sim.ObjectsAvatars.ForEach(delegate(OMV.Avatar av) { avatarsToNew.Add(av); }); // this happens outside the avatar list lock foreach (OMV.Avatar av in avatarsToNew) { worldComm.Objects_AvatarUpdate(netComm, new OMV.AvatarUpdateEventArgs(sim, av, 0, true)); } }
public static void LoadASim(OMV.Simulator sim, OMV.GridClient netComm, CommLLLP worldComm) { LogManager.Log.Log(LogLevel.DCOMM, "LoadWorldObjects: loading avatars and objects for sim {0}", sim.Name); AddAvatars(sim, netComm, worldComm); AddObjects(sim, netComm, worldComm); }
// Return 'true' if we don't have this region in our world yet private static bool WeDontKnowAboutThisSimulator(OMV.Simulator sim, OMV.GridClient netComm, CommLLLP worldComm) { LLRegionContext regn = worldComm.FindRegion(delegate(LLRegionContext rgn) { return rgn.Simulator.ID == sim.ID; }); return (regn == null); }
public override void Start() { string commName = ModuleParams.ParamString(ModuleName + ".Comm.Name"); try { m_comm = (CommLLLP)ModuleManager.Instance.Module(commName); } catch (Exception e) { m_log.Log(LogLevel.DBADERROR, "CommLLLPRest COULD NOT CONNECT TO COMM MODULE NAMED " + commName); m_log.Log(LogLevel.DBADERROR, "CommLLLPRest error = " + e.ToString()); } try { m_apiName = ModuleParams.ParamString(ModuleName + ".APIName"); ParameterSet connParams = m_comm.ConnectionParams; m_paramGetHandler = new RestHandler("/" + m_apiName + "/status", ref connParams, false); m_actionHandler = new RestHandler("/" + m_apiName + "/connect", null, ProcessPost); } catch (Exception e) { m_log.Log(LogLevel.DBADERROR, "CommLLLPRest COULD NOT REGISTER REST OPERATION: " + e.ToString()); } }
// IModule.AfterAllModulesLoaded public virtual bool AfterAllModulesLoaded() { LogManager.Log.Log(LogLevel.DINIT, ModuleName + ".AfterAllModulesLoaded()"); try { // Find the rest manager and setup to get web requests m_restHandler = new RestHandler("/chat", GetHandler, PostHandler); // Find the world and connect to same to hear about all the avatars String commName = ModuleParams.ParamString(m_moduleName + ".Comm.Name"); m_comm = (CommLLLP)ModuleManager.Instance.Module(commName); } catch (Exception e) { m_log.Log(LogLevel.DBADERROR, "EXCEPTION CONNECTING TO SERVICES: {0}", e); return false; } m_comm.GridClient.Self.ChatFromSimulator += new EventHandler<OpenMetaverse.ChatEventArgs>(Self_ChatFromSimulator); return true; }