diff --git a/Agent_Manager.cs b/Agent_Manager.cs index 3b0548091a..9aa8d7f167 100644 --- a/Agent_Manager.cs +++ b/Agent_Manager.cs @@ -32,122 +32,173 @@ using libsecondlife.AssetSystem; using System.IO; using Axiom.MathLib; -namespace Second_server +namespace OpenSim { /// /// Description of Agent_Manager. /// - public class Agent_Manager + public class AgentManager { - public Dictionary Agent_list; - //public uint number_agents=0; + public Dictionary AgentList; + private uint local_numer=0; private Server server; - public Prim_manager prim_man; - private byte [] data1; + public PrimManager Prim_Manager; - private libsecondlife.Packets.RegionHandshakePacket reg; + private libsecondlife.Packets.RegionHandshakePacket RegionPacket; private System.Text.Encoding enc = System.Text.Encoding.ASCII; - public libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock avatar_template; - //private int appc=0; - - public Agent_Manager(Server serve) + public libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate; + + /// + /// + /// + /// + public AgentManager(Server serve) { - Agent_list=new Dictionary(); + AgentList=new Dictionary(); server=serve; this.initialise(); } - //*************************************************** - public Avatar_data Get_Agent(LLUUID id) + + /// + /// + /// + /// + /// + public AvatarData GetAgent(LLUUID id) { - - - if(!this.Agent_list.ContainsKey(id)) + if(!this.AgentList.ContainsKey(id)) { return null; } else { - Avatar_data ad=this.Agent_list[id]; + AvatarData ad=this.AgentList[id]; return ad; } } - - public void Add_Agent(Avatar_data agent) + /// + /// + /// + /// + public void AddAgent(AvatarData agent) { - this.Agent_list.Add(agent.Full_ID,agent); + this.AgentList.Add(agent.FullID,agent); } + /// + /// + /// + /// + /// + /// + /// + /// - public bool New_Agent(User_Agent_info User_info) + /// + /// + /// + /// + /// + /// + /// + public bool NewAgent(User_Agent_info User_info, string first, string last) { - Avatar_data ad=new Avatar_data(); - ad.Full_ID=User_info.AgentID; - ad.Net_info=User_info; - ad.pos=new LLVector3(100,100,22); - this.Agent_list.Add(ad.Full_ID,ad); + AvatarData agent=new AvatarData(); + agent.FullID=User_info.AgentID; + agent.NetInfo=User_info; + agent.NetInfo.first_name=first; + agent.NetInfo.last_name=last; + agent.Position=new LLVector3(100,100,22); + this.AgentList.Add(agent.FullID,agent); return(true); } - public void Agent_join(User_Agent_info User_info) + /// + /// + /// + /// + public void RemoveAgent(User_Agent_info UserInfo) + { + this.AgentList.Remove(UserInfo.AgentID); + + //tell other clients to delete this avatar + } + + /// + /// + /// + /// + public void AgentJoin(User_Agent_info User_info) { //send region data - server.SendPacket(reg,true,User_info); + server.SendPacket(RegionPacket,true,User_info); //inform client of join comlete libsecondlife.Packets.AgentMovementCompletePacket mov=new AgentMovementCompletePacket(); mov.AgentData.SessionID=User_info.SessionID; mov.AgentData.AgentID=User_info.AgentID; - mov.Data.RegionHandle=1096213093147648; + mov.Data.RegionHandle=Globals.Instance.RegionHandle; mov.Data.Timestamp=1169838966; mov.Data.Position=new LLVector3(100f,100f,22f); mov.Data.LookAt=new LLVector3(0.99f,0.042f,0); server.SendPacket(mov,true,User_info); } - public void tick() + + /// + /// + /// + public void UpdatePositions() { //update positions - foreach (KeyValuePair kp in this.Agent_list) + foreach (KeyValuePair kp in this.AgentList) { - kp.Value.pos.X+=(kp.Value.vel.X*0.2f); - kp.Value.pos.Y+=(kp.Value.vel.Y*0.2f); - kp.Value.pos.Z+=(kp.Value.vel.Z*0.2f); + kp.Value.Position.X+=(kp.Value.Velocity.X*0.2f); + kp.Value.Position.Y+=(kp.Value.Velocity.Y*0.2f); + kp.Value.Position.Z+=(kp.Value.Velocity.Z*0.2f); } } - //************************************************************** + + /// + /// + /// private void initialise() { //Region data - reg=new RegionHandshakePacket(); - reg.RegionInfo.BillableFactor=0; - reg.RegionInfo.IsEstateManager=false; - reg.RegionInfo.TerrainHeightRange00=60; - reg.RegionInfo.TerrainHeightRange01=60; - reg.RegionInfo.TerrainHeightRange10=60; - reg.RegionInfo.TerrainHeightRange11=60; - reg.RegionInfo.TerrainStartHeight00=20; - reg.RegionInfo.TerrainStartHeight01=20; - reg.RegionInfo.TerrainStartHeight10=20; - reg.RegionInfo.TerrainStartHeight11=20; - reg.RegionInfo.SimAccess=13; - reg.RegionInfo.WaterHeight=5; - reg.RegionInfo.RegionFlags=72458694; - reg.RegionInfo.SimName=enc.GetBytes( "Test Sandbox\0"); - reg.RegionInfo.SimOwner=new LLUUID("00000000-0000-0000-0000-000000000000"); - reg.RegionInfo.TerrainBase0=new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); - reg.RegionInfo.TerrainBase1=new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); - reg.RegionInfo.TerrainBase2=new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); - reg.RegionInfo.TerrainBase3=new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); - reg.RegionInfo.TerrainDetail0=new LLUUID("00000000-0000-0000-0000-000000000000"); - reg.RegionInfo.TerrainDetail1=new LLUUID("00000000-0000-0000-0000-000000000000"); - reg.RegionInfo.TerrainDetail2=new LLUUID("00000000-0000-0000-0000-000000000000"); - reg.RegionInfo.TerrainDetail3=new LLUUID("00000000-0000-0000-0000-000000000000"); - reg.RegionInfo.CacheID=new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab33"); - - this.setuptemplate("objectupate168.dat"); + RegionPacket=new RegionHandshakePacket(); + RegionPacket.RegionInfo.BillableFactor=0; + RegionPacket.RegionInfo.IsEstateManager=false; + RegionPacket.RegionInfo.TerrainHeightRange00=60; + RegionPacket.RegionInfo.TerrainHeightRange01=60; + RegionPacket.RegionInfo.TerrainHeightRange10=60; + RegionPacket.RegionInfo.TerrainHeightRange11=60; + RegionPacket.RegionInfo.TerrainStartHeight00=20; + RegionPacket.RegionInfo.TerrainStartHeight01=20; + RegionPacket.RegionInfo.TerrainStartHeight10=20; + RegionPacket.RegionInfo.TerrainStartHeight11=20; + RegionPacket.RegionInfo.SimAccess=13; + RegionPacket.RegionInfo.WaterHeight=5; + RegionPacket.RegionInfo.RegionFlags=72458694; + RegionPacket.RegionInfo.SimName=enc.GetBytes( Globals.Instance.RegionName); + RegionPacket.RegionInfo.SimOwner=new LLUUID("00000000-0000-0000-0000-000000000000"); + RegionPacket.RegionInfo.TerrainBase0=new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); + RegionPacket.RegionInfo.TerrainBase1=new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); + RegionPacket.RegionInfo.TerrainBase2=new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); + RegionPacket.RegionInfo.TerrainBase3=new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); + RegionPacket.RegionInfo.TerrainDetail0=new LLUUID("00000000-0000-0000-0000-000000000000"); + RegionPacket.RegionInfo.TerrainDetail1=new LLUUID("00000000-0000-0000-0000-000000000000"); + RegionPacket.RegionInfo.TerrainDetail2=new LLUUID("00000000-0000-0000-0000-000000000000"); + RegionPacket.RegionInfo.TerrainDetail3=new LLUUID("00000000-0000-0000-0000-000000000000"); + RegionPacket.RegionInfo.CacheID=new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab37"); + + this.SetupTemplate("objectupate168.dat"); } - public void setuptemplate(string name) + /// + /// + /// + /// + private void SetupTemplate(string name) { /*ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); objupdate.RegionData.RegionHandle=1096213093147648; @@ -184,95 +235,87 @@ namespace Second_server Array.Copy(pb,0,objdata.ObjectData,16,pb.Length); - avatar_template=objdata; + AvatarTemplate=objdata; } - //********************************************************** - public void send_intial_data(User_Agent_info User_info) + + /// + /// + /// + /// + public void SendInitialData(User_Agent_info User_info) { - //shouldn't really have to read all this in from disk for every new client? + //shouldn't have to read all this in from disk for every new client string data_path=System.AppDomain.CurrentDomain.BaseDirectory + @"\layer_data\"; //send layerdata LayerDataPacket layerpack=new LayerDataPacket(); layerpack.LayerID.Type=76; - //layerpack.LayerData.ReadfromFile(data_path+@"layerdata0.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata0.dat"); - - //server.SendPacket(layerpack,true,User_info); - + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata0.dat"); + LayerDataPacket layerpack1=new LayerDataPacket(); layerpack1.LayerID.Type=76; - //layerpack1.LayerData.ReadfromFile(data_path+@"layerdata1.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata1.dat"); - //server.SendPacket(layerpack1,true,User_info); + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata1.dat"); LayerDataPacket layerpack2=new LayerDataPacket(); layerpack2.LayerID.Type=56; - //layerpack2.LayerData.ReadfromFile(data_path+@"layerdata2.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata2.dat"); - //server.SendPacket(layerpack2,true,User_info); + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata2.dat"); LayerDataPacket layerpack3=new LayerDataPacket(); layerpack3.LayerID.Type=55; - //layerpack3.LayerData.ReadfromFile(data_path+@"layerdata3.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata3.dat"); - //server.SendPacket(layerpack3,true,User_info); + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata3.dat"); LayerDataPacket layerpack4=new LayerDataPacket(); layerpack4.LayerID.Type=56; - //layerpack4.LayerData.ReadfromFile(data_path+@"layerdata4.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata4.dat"); - //server.SendPacket(layerpack4,true,User_info); + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata4.dat"); LayerDataPacket layerpack5=new LayerDataPacket(); layerpack5.LayerID.Type=55; - //layerpack5.LayerData.ReadfromFile(data_path+@"layerdata5.dat"); - this.read_layerdata(User_info,ref layerpack,data_path+@"layerdata5.dat"); - //server.SendPacket(layerpack5,true,User_info); - + this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata5.dat"); //send intial set of captured prims data? - this.prim_man.Read_Prim_database( "objectdatabase.ini",User_info); + this.Prim_Manager.ReadPrimDatabase( "objectdatabase.ini",User_info); //send prims that have been created by users //prim_man.send_existing_prims(User_info); //send update about clients avatar - this.send_intial_avatar_position(User_info); + this.SendInitialAvatarPosition(User_info); //send updates about all other users - //this.send_test_avatar_position(User_info); - foreach (KeyValuePair kp in this.Agent_list) + foreach (KeyValuePair kp in this.AgentList) { - if(kp.Value.Net_info.AgentID!=User_info.AgentID) + if(kp.Value.NetInfo.AgentID!=User_info.AgentID) { - this.send_other_avatar_position(User_info,kp.Value); + this.SendOtherAvatarPosition(User_info,kp.Value); } - } - - + } } - public void send_intial_avatar_position(User_Agent_info User_info) + + /// + /// + /// + /// + public void SendInitialAvatarPosition(User_Agent_info User_info) { //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; + objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle; objupdate.RegionData.TimeDilation=64096; objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; - objupdate.ObjectData[0]=avatar_template; + objupdate.ObjectData[0]=AvatarTemplate; //give this avatar object a local id and assign the user a name objupdate.ObjectData[0].ID=8880000+this.local_numer; User_info.localID=objupdate.ObjectData[0].ID; //User_info.name="Test"+this.local_numer+" User"; - this.Get_Agent(User_info.AgentID).started=true; + this.GetAgent(User_info.AgentID).Started=true; objupdate.ObjectData[0].FullID=User_info.AgentID; - objupdate.ObjectData[0].NameValue=enc.GetBytes("FirstName STRING RW SV Test"+ this.local_numer+"\nLastName STRING RW SV User \0"); - User_info.name="FirstName STRING RW SV Test"+ this.local_numer+"\nLastName STRING RW SV User \0"; - User_info.last_name="User"; - User_info.first_name="Test"+this.local_numer; + objupdate.ObjectData[0].NameValue=enc.GetBytes("FirstName STRING RW SV "+User_info.first_name+"\nLastName STRING RW SV "+User_info.last_name+" \0"); + User_info.name="FirstName STRING RW SV "+User_info.first_name+"\nLastName STRING RW SV "+User_info.last_name+" \0"; + //User_info.last_name="User"; + //User_info.first_name="Test"+this.local_numer; libsecondlife.LLVector3 pos2=new LLVector3(100f,100.0f,22.0f); byte[] pb=pos2.GetBytes(); @@ -283,36 +326,23 @@ namespace Second_server server.SendPacket(objupdate,true,User_info); //send this info to other existing clients - foreach (KeyValuePair kp in this.Agent_list) + foreach (KeyValuePair kp in this.AgentList) { - if(kp.Value.Net_info.AgentID!=User_info.AgentID) + if(kp.Value.NetInfo.AgentID!=User_info.AgentID) { - server.SendPacket(objupdate,true,kp.Value.Net_info); - this.send_other_apper(kp.Value.Net_info,objupdate.ObjectData[0].FullID); + server.SendPacket(objupdate,true,kp.Value.NetInfo); + this.SendOtherAppearance(kp.Value.NetInfo,objupdate.ObjectData[0].FullID); } } } - public void send_intial_avatar_apper(User_Agent_info user) + + /// + /// + /// + /// + public void SendIntialAvatarAppearance(User_Agent_info user) { - - //seems that we don't send a avatarapperance for ourself. - /*AvatarAppearancePacket avp=new AvatarAppearancePacket(); - - avp.VisualParam=new AvatarAppearancePacket.VisualParamBlock[218]; - avp.ObjectData.TextureEntry=this.avatar_template.TextureEntry;// br.ReadBytes((int)numBytes); - - AvatarAppearancePacket.VisualParamBlock avblock=null; - for(int i=0; i<218; i++) - { - avblock=new AvatarAppearancePacket.VisualParamBlock(); - avblock.ParamValue=(byte)100; - avp.VisualParam[i]=avblock; - } - - avp.Sender.IsTrial=false; - avp.Sender.ID=user.AgentID; - */ AgentWearablesUpdatePacket aw=new AgentWearablesUpdatePacket(); aw.AgentData.AgentID=user.AgentID; @@ -323,22 +353,18 @@ namespace Second_server aw.WearableData= new AgentWearablesUpdatePacket.WearableDataBlock[13]; AgentWearablesUpdatePacket.WearableDataBlock awb=null; awb=new AgentWearablesUpdatePacket.WearableDataBlock(); - awb.WearableType=(byte)0; - awb.AssetID=new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); - //awb.ItemID=new LLUUID("b7878000-0000-0000-0000-000000000000"); - awb.ItemID=new LLUUID("b7878441893b094917f791174bc8401c"); - //awb.ItemID=new LLUUID("00000000-0000-0000-0000-000000000000"); - aw.WearableData[0]=awb; - - - /*awb=new AgentWearablesUpdatePacket.WearableDataBlock(); - awb.WearableType=(byte)1; - awb.AssetID=new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49"); - awb.ItemID=new LLUUID("193f0876fc11d143797454352f9c9c26"); - //awb.ItemID=new LLUUID("00000000-0000-0000-0000-000000000000"); - aw.WearableData[1]=awb;*/ - - + awb.WearableType=(byte)0; + awb.AssetID=new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); + awb.ItemID=new LLUUID("b7878441893b094917f791174bc8401c"); + aw.WearableData[0]=awb; + + /*awb=new AgentWearablesUpdatePacket.WearableDataBlock(); + awb.WearableType=(byte)1; + awb.AssetID=new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49"); + awb.ItemID=new LLUUID("193f0876fc11d143797454352f9c9c26"); + //awb.ItemID=new LLUUID("00000000-0000-0000-0000-000000000000"); + aw.WearableData[1]=awb;*/ + for(int i=1; i<13; i++) { awb=new AgentWearablesUpdatePacket.WearableDataBlock(); @@ -348,13 +374,15 @@ namespace Second_server aw.WearableData[i]=awb; } - //server.SendPacket(avp,true,user); server.SendPacket(aw,true,user); - //System.Console.WriteLine(avp); - - } - public void send_other_apper(User_Agent_info user,LLUUID id) + + /// + /// + /// + /// + /// + public void SendOtherAppearance(User_Agent_info user,LLUUID id) { AvatarAppearancePacket avp=new AvatarAppearancePacket(); @@ -384,21 +412,25 @@ namespace Second_server server.SendPacket(avp,true,user); } - - public void send_test_avatar_position(User_Agent_info User_info) + /// + /// + /// + /// + /// + public void SendOtherAvatarPosition(User_Agent_info User_info, AvatarData avd) { //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; + objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle; objupdate.RegionData.TimeDilation=64500; objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; - objupdate.ObjectData[0]=avatar_template; + objupdate.ObjectData[0]=AvatarTemplate; //give this avatar object a local id and assign the user a name - objupdate.ObjectData[0].ID=8880000+this.local_numer; - objupdate.ObjectData[0].FullID=new LLUUID("00000000-0000-0000-5665-000000000034"); - objupdate.ObjectData[0].NameValue=enc.GetBytes("FirstName STRING RW SV Test"+ this.local_numer+"\nLastName STRING RW SV User \0"); - libsecondlife.LLVector3 pos2=new LLVector3(120f,120.0f,22.0f); + objupdate.ObjectData[0].ID=avd.NetInfo.localID; + objupdate.ObjectData[0].FullID=avd.NetInfo.AgentID;//new LLUUID("00000000-0000-0000-5665-000000000034"); + objupdate.ObjectData[0].NameValue=enc.GetBytes(avd.NetInfo.name);//enc.GetBytes("FirstName STRING RW SV Test"+ this.local_numer+"\nLastName STRING RW SV User \0"); + libsecondlife.LLVector3 pos2=new LLVector3(avd.Position.X,avd.Position.Y,avd.Position.Z); byte[] pb=pos2.GetBytes(); @@ -407,37 +439,16 @@ namespace Second_server server.SendPacket(objupdate,true,User_info); - this.send_other_apper(User_info,new LLUUID("00000000-0000-0000-5665-000000000034")); + this.SendOtherAppearance(User_info,avd.NetInfo.AgentID);//new LLUUID("00000000-0000-0000-5665-000000000034")); } - - public void send_other_avatar_position(User_Agent_info User_info, Avatar_data avd) - { - //send a objectupdate packet with information about the clients avatar - ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; - objupdate.RegionData.TimeDilation=64500; - objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; - - objupdate.ObjectData[0]=avatar_template; - //give this avatar object a local id and assign the user a name - objupdate.ObjectData[0].ID=avd.Net_info.localID; - objupdate.ObjectData[0].FullID=avd.Net_info.AgentID;//new LLUUID("00000000-0000-0000-5665-000000000034"); - objupdate.ObjectData[0].NameValue=enc.GetBytes(avd.Net_info.name);//enc.GetBytes("FirstName STRING RW SV Test"+ this.local_numer+"\nLastName STRING RW SV User \0"); - libsecondlife.LLVector3 pos2=new LLVector3(avd.pos.X,avd.pos.Y,avd.pos.Z); - - byte[] pb=pos2.GetBytes(); - - Array.Copy(pb,0,objupdate.ObjectData[0].ObjectData,16,pb.Length); - this.local_numer++; - - server.SendPacket(objupdate,true,User_info); - - this.send_other_apper(User_info,avd.Net_info.AgentID);//new LLUUID("00000000-0000-0000-5665-000000000034")); - - } - //************************************************************* - public void send_chat_message(User_Agent_info User_info, string line) + + /// + /// + /// + /// + /// + public void SendChatMessage(User_Agent_info User_info, string line) { libsecondlife.Packets.ChatFromSimulatorPacket reply=new ChatFromSimulatorPacket(); reply.ChatData.Audible=1; @@ -452,23 +463,33 @@ namespace Second_server server.SendPacket(reply,true,User_info); //send to all users - foreach (KeyValuePair kp in this.Agent_list) + foreach (KeyValuePair kp in this.AgentList) { - if(kp.Value.Net_info.AgentID!=User_info.AgentID) + if(kp.Value.NetInfo.AgentID!=User_info.AgentID) { - server.SendPacket(reply,true,kp.Value.Net_info); + server.SendPacket(reply,true,kp.Value.NetInfo); } } } - //************************************************************* - public void send_move_command(User_Agent_info user, bool stop,float x, float y, float z, uint av_id, libsecondlife.LLQuaternion body) + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void SendMoveCommand(User_Agent_info user, bool stop,float x, float y, float z, uint av_id, libsecondlife.LLQuaternion body) { uint ID=user.localID; //ID=av_id; byte[] bytes=new byte[60]; ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket(); - im.RegionData.RegionHandle=1096213093147648; + im.RegionData.RegionHandle=Globals.Instance.RegionHandle;; im.RegionData.TimeDilation=64096; im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; @@ -477,7 +498,7 @@ namespace Second_server im.ObjectData[0]=dat; - dat.TextureEntry=avatar_template.TextureEntry; + dat.TextureEntry=AvatarTemplate.TextureEntry; libsecondlife.LLVector3 pos2=new LLVector3(x,y,z); bytes[i++] = (byte)(ID % 256); @@ -571,16 +592,22 @@ namespace Second_server server.SendPacket(im,true,user); //should send to all users. - foreach (KeyValuePair kp in this.Agent_list) + foreach (KeyValuePair kp in this.AgentList) { - if(kp.Value.Net_info.AgentID!=user.AgentID) + if(kp.Value.NetInfo.AgentID!=user.AgentID) { - server.SendPacket(im,true,kp.Value.Net_info); + server.SendPacket(im,true,kp.Value.NetInfo); } } } - //************************************************************* - public void read_layerdata(User_Agent_info User_info,ref LayerDataPacket lay,string name) + + /// + /// + /// + /// + /// + /// + public void SendLayerData(User_Agent_info User_info,ref LayerDataPacket lay,string name) { FileInfo fInfo = new FileInfo(name); @@ -590,7 +617,7 @@ namespace Second_server BinaryReader br = new BinaryReader(fStream); - data1 = br.ReadBytes((int)numBytes); + byte [] data1 = br.ReadBytes((int)numBytes); br.Close(); @@ -601,18 +628,32 @@ namespace Second_server } } - public class Avatar_data + public class AvatarData { - public User_Agent_info Net_info; - public LLUUID Full_ID; - public LLVector3 pos; - public LLVector3 vel=new LLVector3(0,0,0); - public bool walk=false; - public bool started=false; + public User_Agent_info NetInfo; + public LLUUID FullID; + public LLVector3 Position; + public LLVector3 Velocity=new LLVector3(0,0,0); + //public LLQuaternion Rotation; + public bool Walk=false; + public bool Started=false; + //public TextureEntry TextureEntry; - public Avatar_data() + public AvatarData() { } } + /* + public class AvatarParams + { + public byte[] Params; + + public AvatarParams() + { + + } + + } + */ } diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs index 2738c9254a..3fc9cb35cc 100644 --- a/AssemblyInfo.cs +++ b/AssemblyInfo.cs @@ -36,11 +36,11 @@ using System.Runtime.InteropServices; // change them to the information which is associated with the assembly // you compile. -[assembly: AssemblyTitle("Second-server")] +[assembly: AssemblyTitle("OpenSim")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Second-server")] +[assembly: AssemblyProduct("OpenSim")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -56,4 +56,4 @@ using System.Runtime.InteropServices; // You can specify all values by your own or you can build default build and revision // numbers with the '*' character (the default): -[assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.1.*")] diff --git a/Asset_manager.cs b/Asset_manager.cs index 3723e1d140..20cf3a19d2 100644 --- a/Asset_manager.cs +++ b/Asset_manager.cs @@ -34,26 +34,26 @@ using libsecondlife.Packets; using libsecondlife.AssetSystem; using System.IO; -namespace Second_server +namespace OpenSim { /// /// Description of Asset_manager. /// - public class Asset_manager + public class AssetManager { - public Dictionary Assets; + public Dictionary Assets; public ArrayList requests=new ArrayList(); //should change to a generic // public ArrayList uploads=new ArrayList(); private Server server; - public Asset_manager(Server serve) + public AssetManager(Server serve) { server=serve; - Assets=new Dictionary (); + Assets=new Dictionary (); this.initialise(); } - public void add_request(User_Agent_info user, LLUUID asset_id, TransferRequestPacket tran_req) + public void AddRequest(User_Agent_info user, LLUUID asset_id, TransferRequestPacket tran_req) { if(!this.Assets.ContainsKey(asset_id)) @@ -61,18 +61,18 @@ namespace Second_server //not found asset return; } - Asset_info info=this.Assets[asset_id]; + AssetInfo info=this.Assets[asset_id]; System.Console.WriteLine("send asset : "+asset_id); //for now as it will be only skin or shape request just send back the asset - TransferInfoPacket tran_i=new TransferInfoPacket(); - tran_i.TransferInfo.ChannelType=2; - tran_i.TransferInfo.Status=0; - tran_i.TransferInfo.TargetType=0; - tran_i.TransferInfo.Params=tran_req.TransferInfo.Params; - tran_i.TransferInfo.Size=info.data.Length; - tran_i.TransferInfo.TransferID=tran_req.TransferInfo.TransferID; + TransferInfoPacket Transfer=new TransferInfoPacket(); + Transfer.TransferInfo.ChannelType=2; + Transfer.TransferInfo.Status=0; + Transfer.TransferInfo.TargetType=0; + Transfer.TransferInfo.Params=tran_req.TransferInfo.Params; + Transfer.TransferInfo.Size=info.data.Length; + Transfer.TransferInfo.TransferID=tran_req.TransferInfo.TransferID; - server.SendPacket(tran_i,true,user); + server.SendPacket(Transfer,true,user); TransferPacketPacket tran_p=new TransferPacketPacket(); tran_p.TransferData.Packet=0; @@ -110,14 +110,17 @@ namespace Second_server private void initialise() { //for now read in our test image - Asset_info im=new Asset_info(); + AssetInfo im=new AssetInfo(); im.filename="base_shape.dat"; im.Full_ID=new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); - this.load_asset(im); + this.loadAsset(im); this.Assets.Add(im.Full_ID,im); } - private void load_asset(Asset_info info) + private void loadAsset(AssetInfo info) { + //should request Asset from storage manager + //but for now read from file + string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\assets\"; string filename=data_path+@info.filename; FileInfo fInfo = new FileInfo(filename); @@ -135,21 +138,21 @@ namespace Second_server } } - public class Asset_request + public class AssetRequest { - public User_Agent_info req_user; - public LLUUID req_image; - public Asset_info asset_inf; + public User_Agent_info RequestUser; + public LLUUID RequestImage; + public AssetInfo asset_inf; public long data_pointer=0; public int num_packets=0; public int packet_counter=0; - public Asset_request() + public AssetRequest() { } } - public class Asset_info + public class AssetInfo { public byte[] data; public LLUUID Full_ID; @@ -159,7 +162,7 @@ namespace Second_server public ulong last_used; //need to add a tick/time counter and keep record // of how often images are requested to unload unused ones. - public Asset_info() + public AssetInfo() { } diff --git a/Controller.cs b/Controller.cs index 351ff6524b..f2bd85cfb9 100644 --- a/Controller.cs +++ b/Controller.cs @@ -38,11 +38,12 @@ using System.IO; using Axiom.MathLib; using log4net; -namespace Second_server { +namespace OpenSim +{ /// /// Description of MainForm. /// - public partial class Controller : Server_callback { + public partial class Controller : ServerCallback { @@ -54,51 +55,79 @@ namespace Second_server { } public Server server; - - private Agent_Manager agent_man; - private Prim_manager prim_man; - private Texture_manager texture_man; - private Asset_manager asset_man; - private Login_manager login_man; //built in login server + public Logon _login; + private AgentManager Agent_Manager; + private PrimManager Prim_Manager; + private TextureManager Texture_Manager; + private AssetManager Asset_Manager; + private GridManager Grid_Manager; + private LoginManager Login_Manager; //built in login server private ulong time; //ticks private Timer timer1 = new Timer(); public Controller() { + _login=new Logon(); // should create a list for these. server = new Server( this ); - agent_man = new Agent_Manager( this.server ); - prim_man = new Prim_manager( this.server ); - texture_man = new Texture_manager( this.server ); - asset_man = new Asset_manager( this.server ); - prim_man.agent_man = agent_man; - agent_man.prim_man = prim_man; - login_man = new Login_manager(); // startup - login_man.startup(); // login server - timer1.Enabled = true; + Agent_Manager = new AgentManager( this.server ); + Prim_Manager = new PrimManager( this.server ); + Texture_Manager = new TextureManager( this.server ); + Asset_Manager = new AssetManager( this.server ); + Prim_Manager.Agent_Manager = Agent_Manager; + Agent_Manager.Prim_Manager = Prim_Manager; + Grid_Manager=new GridManager(this.server,Agent_Manager); + if(Globals.Instance.LoginSever) + { + Console.WriteLine("Starting login Server"); + Login_Manager = new LoginManager(_login); // startup + Login_Manager.Startup(); // login server + } + timer1.Enabled = true; timer1.Interval = 200; timer1.Elapsed +=new ElapsedEventHandler( this.Timer1Tick ); } - public void main_callback( Packet pack, User_Agent_info User_info ) { - if( ( pack.Type != PacketType.StartPingCheck ) && ( pack.Type != PacketType.AgentUpdate ) ) { - System.Console.WriteLine(pack.Type); + public void MainCallback( Packet pack, User_Agent_info User_info ) { + //System.Console.WriteLine(pack.Type); + if( ( pack.Type != PacketType.StartPingCheck ) && ( pack.Type != PacketType.AgentUpdate ) ) { + // System.Console.WriteLine(pack.Type); //this.richTextBox1.Text=this.richTextBox1.Text+"\n "+pack.Type; } if( pack.Type == PacketType.AgentSetAppearance ) { - System.Console.WriteLine(pack); + // System.Console.WriteLine(pack); //this.richTextBox1.Text=this.richTextBox1.Text+"\n "+pack.Type; } + if(pack.Type== PacketType.MapBlockRequest) + { + //int MinX, MinY, MaxX, MaxY; + MapBlockRequestPacket MapRequest=(MapBlockRequestPacket)pack; + this.Grid_Manager.RequestMapBlock(User_info,MapRequest.PositionData.MinX,MapRequest.PositionData.MinY,MapRequest.PositionData.MaxX,MapRequest.PositionData.MaxY); + + } + if(pack.Type== PacketType.CloseCircuit) + { + this.Agent_Manager.RemoveAgent(User_info); + } + if(pack.Type== PacketType.MapLayerRequest) + { + this.Grid_Manager.RequestMapLayer(User_info); + + } + if((pack.Type== PacketType.TeleportRequest ) ||(pack.Type== PacketType.TeleportLocationRequest)) + { + TeleportLocationRequestPacket Request=(TeleportLocationRequestPacket)pack; + + this.Grid_Manager.RequestTeleport(User_info,Request); + + } if( pack.Type == PacketType.TransferRequest ) { TransferRequestPacket tran = (TransferRequestPacket)pack; LLUUID id = new LLUUID( tran.TransferInfo.Params, 0 ); if( ( id == new LLUUID( "66c41e39-38f9-f75a-024e-585989bfab73" ) ) || ( id == new LLUUID( "e0ee49b5a4184df8d3c9a65361fe7f49" ) ) ) { - //System.Console.WriteLine(pack); - //System.Console.WriteLine(tran.TransferInfo.TransferID); - asset_man.add_request( User_info, id, tran ); - //this.richTextBox1.Text=this.richTextBox1.Text+"\n "+pack.Type; + Asset_Manager.AddRequest( User_info, id, tran ); } } @@ -111,23 +140,23 @@ namespace Second_server { } if( pack.Type == PacketType.CompleteAgentMovement ) { // new client - agent_man.Agent_join( User_info ); + Agent_Manager.AgentJoin( User_info ); } if( pack.Type == PacketType.RequestImage ) { RequestImagePacket image_req = (RequestImagePacket)pack; for( int i = 0; i < image_req.RequestImage.Length; i++ ) { - this.texture_man.add_request( User_info, image_req.RequestImage[ i ].Image ); + this.Texture_Manager.AddRequest( User_info, image_req.RequestImage[ i ].Image ); } } if( pack.Type == PacketType.RegionHandshakeReply ) { //recieved regionhandshake so can now start sending info - agent_man.send_intial_data( User_info ); + Agent_Manager.SendInitialData( User_info ); //this.setuptemplates("objectupate164.dat",User_info,false); } if( pack.Type == PacketType.ObjectAdd ) { ObjectAddPacket ad = (ObjectAddPacket)pack; - prim_man.create_prim( User_info, ad.ObjectData.RayEnd, ad ); + Prim_Manager.CreatePrim( User_info, ad.ObjectData.RayEnd, ad ); //this.send_prim(User_info,ad.ObjectData.RayEnd, ad); } if( pack.Type == PacketType.ObjectPosition ) { @@ -141,46 +170,55 @@ namespace Second_server { if( mupd.ObjectData[ i ].Type == 9 ) //change position { libsecondlife.LLVector3 pos = new LLVector3( mupd.ObjectData[ i ].Data, 0 ); - - prim_man.update_prim_position( User_info, pos.X, pos.Y, pos.Z, mupd.ObjectData[ i ].ObjectLocalID ); + // libsecondlife.LLQuaternion rot=new LLQuaternion(mupd.ObjectData[i].Data,12,true); + Prim_Manager.UpdatePrimPosition( User_info, pos, mupd.ObjectData[ i ].ObjectLocalID ,false ,libsecondlife.LLQuaternion.Identity); //should update stored position of the prim } + else if( mupd.ObjectData[ i ].Type == 10 ) + { + //System.Console.WriteLine(mupd.ObjectData[ i ].Type); + //System.Console.WriteLine(mupd); + libsecondlife.LLVector3 pos = new LLVector3(100,100,22); + libsecondlife.LLQuaternion rot=new LLQuaternion(mupd.ObjectData[i].Data,0,true); + Prim_Manager.UpdatePrimPosition( User_info, pos, mupd.ObjectData[ i ].ObjectLocalID ,true ,rot); + + } } } if( pack.Type == PacketType.AgentWearablesRequest ) { - agent_man.send_intial_avatar_apper( User_info ); + Agent_Manager.SendIntialAvatarAppearance( User_info ); } if( pack.Type == PacketType.AgentUpdate ) { AgentUpdatePacket ag = (AgentUpdatePacket)pack; uint mask = ag.AgentData.ControlFlags & ( 1 ); - Avatar_data m_av = agent_man.Get_Agent( User_info.AgentID ); + AvatarData m_av = Agent_Manager.GetAgent( User_info.AgentID ); if( m_av != null ) { - if( m_av.started ) { + if( m_av.Started ) { if( mask == ( 1 ) ) { - if( !m_av.walk ) { + if( !m_av.Walk ) { //start walking - agent_man.send_move_command( User_info, false, m_av.pos.X, m_av.pos.Y, m_av.pos.Z, 0, ag.AgentData.BodyRotation ); + Agent_Manager.SendMoveCommand( User_info, false, m_av.Position.X, m_av.Position.Y, m_av.Position.Z, 0, ag.AgentData.BodyRotation ); Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3( 1, 0, 0 ); Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion( ag.AgentData.BodyRotation.W, ag.AgentData.BodyRotation.X, ag.AgentData.BodyRotation.Y, ag.AgentData.BodyRotation.Z ); Axiom.MathLib.Vector3 direc = q * v3; direc.Normalize(); direc = direc * ( ( 0.03f ) * 128f ); - m_av.vel.X = direc.x; - m_av.vel.Y = direc.y; - m_av.vel.Z = direc.z; - m_av.walk = true; + m_av.Velocity.X = direc.x; + m_av.Velocity.Y = direc.y; + m_av.Velocity.Z = direc.z; + m_av.Walk = true; } } else { - if( m_av.walk ) { + if( m_av.Walk ) { //walking but key not pressed so need to stop - agent_man.send_move_command( User_info, true, m_av.pos.X, m_av.pos.Y, m_av.pos.Z, 0, ag.AgentData.BodyRotation ); - m_av.walk = false; - m_av.vel.X = 0; - m_av.vel.Y = 0; - m_av.vel.Z = 0; + Agent_Manager.SendMoveCommand( User_info, true, m_av.Position.X, m_av.Position.Y, m_av.Position.Z, 0, ag.AgentData.BodyRotation ); + m_av.Walk = false; + m_av.Velocity.X = 0; + m_av.Velocity.Y = 0; + m_av.Velocity.Z = 0; } } } @@ -205,25 +243,52 @@ namespace Second_server { else if( comp[ 0 ] == "veloc" ) { } else { - agent_man.send_chat_message( User_info, line ); + Agent_Manager.SendChatMessage( User_info, line ); } } } } - public void new_user( User_Agent_info User_info ) { - Console.WriteLine( "new user - {0} - has joined [session {1}]", User_info.AgentID.ToString(), User_info.SessionID.ToString() ); - agent_man.New_Agent( User_info ); + public void NewUserCallback( User_Agent_info UserInfo ) { + Console.WriteLine( "new user - {0} - has joined [session {1}]", UserInfo.AgentID.ToString(), UserInfo.SessionID.ToString() +"curcuit used"+UserInfo.circuitCode); + string first,last; + lock(_login) + { + first=_login.first; + last=_login.last; + + //should get agentid and sessionid so they can be checked. + } + Agent_Manager.NewAgent( UserInfo ,first,last); + //now because of the lack of Global account management (User server etc) + //we need to reset the names back to default incase a teleport happens + //which will not have a Login name set, so they will use default names + lock(_login) + { + _login.first="Test"; + _login.last="User"; + } } - public void error( string text ) { + public void ErrorCallback( string text ) { Console.WriteLine( "error report: {0}", text ); } void Timer1Tick( object sender, System.EventArgs e ) { this.time++; - agent_man.tick(); - texture_man.Do_work( time ); + Agent_Manager.UpdatePositions(); + Texture_Manager.DoWork( time ); } } -} \ No newline at end of file + public class Logon + { + public string first="Test"; + public string last="User"; + public LLUUID Agent; + public LLUUID Session; + public Logon() + { + + } + } +} diff --git a/Login_manager.cs b/Login_manager.cs index 84f475d0d0..a41bde3b3b 100644 --- a/Login_manager.cs +++ b/Login_manager.cs @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +using Nwc.XmlRpc; using System; using System.IO; using System.Net; @@ -33,24 +33,27 @@ using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Threading; +using System.Collections; +using libsecondlife; -namespace Second_server +namespace OpenSim { /// /// Description of Login_manager. /// - public class Login_manager + public class LoginManager { - public Login_manager() + public LoginManager(Logon login) { - + Login=login; } - + public Logon Login; public ushort loginPort = 8080; public IPAddress clientAddress = IPAddress.Loopback; public IPAddress remoteAddress = IPAddress.Any; private Socket loginServer; private Random RandomClass = new Random(); + private int NumClients; // InitializeLoginProxy: initialize the login proxy private void InitializeLoginProxy() { @@ -59,7 +62,7 @@ namespace Second_server loginServer.Listen(1); } - public void startup() + public void Startup() { this.InitializeLoginProxy(); Thread runLoginProxy = new Thread(new ThreadStart(RunLoginProxy)); @@ -67,7 +70,7 @@ namespace Second_server runLoginProxy.Start(); } - private void RunLoginProxy() { + private void RunLoginProxy() { try { for (;;) { Socket client = loginServer.Accept(); @@ -121,11 +124,52 @@ namespace Second_server if (match.Success) contentLength = Convert.ToInt32(match.Groups[1].Captures[0].ToString()); } while (line != ""); - System.Console.WriteLine(line); + // read the HTTP body into a buffer char[] content = new char[contentLength]; reader.Read(content, 0, contentLength); - + // System.Text.Encoding enc = System.Text.Encoding.ASCII; + XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(new String(content)); + Hashtable requestData = (Hashtable)request.Params[0]; + + string first; + string last; + LLUUID Agent; + LLUUID Session; + + //get login name + if(requestData.Contains("first")) + { + first=(string)requestData["first"]; + } + else + { + first="test"; + } + if(requestData.Contains("last")) + { + last=(string)requestData["last"]; + } + else + { + last="User"+NumClients.ToString(); + } + NumClients++; + + //create a agent and session LLUUID + int AgentRand=this.RandomClass.Next(1,9999); + Agent=new LLUUID("99998888-"+AgentRand.ToString("0000")+"-4f52-8ec1-0b1d5cd6aead"); + int SessionRand=this.RandomClass.Next(1,999); + Session=new LLUUID("aaaabbbb-8932-"+SessionRand.ToString("0000")+"-8664-58f53e442797"); + + //copy data to login object + lock(Login) + { + Login.first=first; + Login.last=last; + Login.Agent=Agent; + Login.Session=Session; + } // forward the XML-RPC response to the client writer.WriteLine("HTTP/1.0 200 OK"); @@ -138,16 +182,16 @@ namespace Second_server SR=File.OpenText("login.dat"); lines=SR.ReadLine(); writer.WriteLine(lines); - lines=SR.ReadLine(); - int ran=this.RandomClass.Next(1,9999); - lines="session_id99998888-"+ran.ToString("0000")+"-4f52-8ec1-0b1d5cd6aead"; + lines=SR.ReadLine(); + //lines="session_id"+Agent.ToString()+""; + lines="session_id99998888-"+AgentRand.ToString("0000")+"-4f52-8ec1-0b1d5cd6aead"; writer.WriteLine(lines); lines=SR.ReadLine(); writer.WriteLine(lines); lines=SR.ReadLine(); - ran=this.RandomClass.Next(1,9999); - lines="agent_idaaaabbbb-8932-"+ran.ToString("0000")+"-8664-58f53e442797"; + //lines="agent_id"+Session.ToString()+""; + lines="agent_idaaaabbbb-8932-"+SessionRand.ToString("0000")+"-8664-58f53e442797"; writer.WriteLine(lines); lines=SR.ReadLine(); diff --git a/Prim_manager.cs b/Prim_manager.cs index da1d626548..1dc075b99a 100644 --- a/Prim_manager.cs +++ b/Prim_manager.cs @@ -35,53 +35,63 @@ using libsecondlife.AssetSystem; using System.IO; using Axiom.MathLib; -namespace Second_server +namespace OpenSim { /// /// Description of Prim_manager. /// - public class Prim_manager + public class PrimManager { private Server server; - public Agent_Manager agent_man; + public AgentManager Agent_Manager; private uint prim_count; - public libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock object_template; - public Dictionary Prim_list; - public Prim_manager(Server serve) + public libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock PrimTemplate; + public Dictionary PrimList; + + /// + /// + /// + /// + public PrimManager(Server serve) { server=serve; - Prim_list=new Dictionary (); - this.setuptemplates("objectupate164.dat"); + PrimList=new Dictionary (); + this.SetupTemplates("objectupate164.dat"); + } - - - //********************************************************************* - public void create_prim(User_Agent_info User_info, libsecondlife.LLVector3 p1, ObjectAddPacket add_pack) + + /// + /// + /// + /// + /// + /// + public void CreatePrim(User_Agent_info User_info, libsecondlife.LLVector3 p1, ObjectAddPacket add_pack) { ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; + objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle; objupdate.RegionData.TimeDilation=64096; objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; - - objupdate.ObjectData[0]=this.object_template; - objupdate.ObjectData[0].OwnerID=User_info.AgentID; - objupdate.ObjectData[0].PCode=add_pack.ObjectData.PCode; - objupdate.ObjectData[0].PathBegin=add_pack.ObjectData.PathBegin; - objupdate.ObjectData[0].PathEnd=add_pack.ObjectData.PathEnd; - objupdate.ObjectData[0].PathScaleX=add_pack.ObjectData.PathScaleX; - objupdate.ObjectData[0].PathScaleY=add_pack.ObjectData.PathScaleY; - objupdate.ObjectData[0].PathShearX=add_pack.ObjectData.PathShearX; - objupdate.ObjectData[0].PathShearY=add_pack.ObjectData.PathShearY; - objupdate.ObjectData[0].PathSkew=add_pack.ObjectData.PathSkew; - objupdate.ObjectData[0].ProfileBegin=add_pack.ObjectData.ProfileBegin; - objupdate.ObjectData[0].ProfileEnd=add_pack.ObjectData.ProfileEnd; - objupdate.ObjectData[0].Scale=add_pack.ObjectData.Scale;//new LLVector3(1,1,1); - objupdate.ObjectData[0].PathCurve=add_pack.ObjectData.PathCurve; - objupdate.ObjectData[0].ProfileCurve=add_pack.ObjectData.ProfileCurve; - objupdate.ObjectData[0].ParentID=0; - objupdate.ObjectData[0].ProfileHollow=add_pack.ObjectData.ProfileHollow; + PrimData PData=new PrimData(); + objupdate.ObjectData[0]=this.PrimTemplate; + PData.OwnerID=objupdate.ObjectData[0].OwnerID=User_info.AgentID; + PData.PCode=objupdate.ObjectData[0].PCode=add_pack.ObjectData.PCode; + PData.PathBegin=objupdate.ObjectData[0].PathBegin=add_pack.ObjectData.PathBegin; + PData.PathEnd=objupdate.ObjectData[0].PathEnd=add_pack.ObjectData.PathEnd; + PData.PathScaleX=objupdate.ObjectData[0].PathScaleX=add_pack.ObjectData.PathScaleX; + PData.PathScaleY=objupdate.ObjectData[0].PathScaleY=add_pack.ObjectData.PathScaleY; + PData.PathShearX=objupdate.ObjectData[0].PathShearX=add_pack.ObjectData.PathShearX; + PData.PathShearY=objupdate.ObjectData[0].PathShearY=add_pack.ObjectData.PathShearY; + PData.PathSkew=objupdate.ObjectData[0].PathSkew=add_pack.ObjectData.PathSkew; + PData.ProfileBegin=objupdate.ObjectData[0].ProfileBegin=add_pack.ObjectData.ProfileBegin; + PData.ProfileEnd=objupdate.ObjectData[0].ProfileEnd=add_pack.ObjectData.ProfileEnd; + PData.Scale=objupdate.ObjectData[0].Scale=add_pack.ObjectData.Scale;//new LLVector3(1,1,1); + PData.PathCurve=objupdate.ObjectData[0].PathCurve=add_pack.ObjectData.PathCurve; + PData.ProfileCurve=objupdate.ObjectData[0].ProfileCurve=add_pack.ObjectData.ProfileCurve; + PData.ParentID=objupdate.ObjectData[0].ParentID=0; + PData.ProfileHollow=objupdate.ObjectData[0].ProfileHollow=add_pack.ObjectData.ProfileHollow; //finish off copying rest of shape data objupdate.ObjectData[0].ID=(uint)(702000+prim_count); @@ -95,30 +105,40 @@ namespace Second_server server.SendPacket(objupdate,true,User_info); //should send to all users - foreach (KeyValuePair kp in agent_man.Agent_list) + foreach (KeyValuePair kp in Agent_Manager.AgentList) { - if(kp.Value.Net_info.AgentID!=User_info.AgentID) + if(kp.Value.NetInfo.AgentID!=User_info.AgentID) { - server.SendPacket(objupdate,true,kp.Value.Net_info); + server.SendPacket(objupdate,true,kp.Value.NetInfo); } } //should store this infomation - prim_info n_prim=new prim_info(); - n_prim.full_ID=objupdate.ObjectData[0].FullID; - n_prim.local_ID=objupdate.ObjectData[0].ID; - n_prim.pos=p1; + PrimInfo NewPrim=new PrimInfo(); + NewPrim.FullID=objupdate.ObjectData[0].FullID; + NewPrim.LocalID=objupdate.ObjectData[0].ID; + NewPrim.Position=p1; + NewPrim.data=PData; - this.Prim_list.Add(n_prim.full_ID,n_prim); + this.PrimList.Add(NewPrim.FullID,NewPrim); //store rest of data } - public void update_prim_position(User_Agent_info user,float x, float y, float z,uint l_id) + + /// + /// + /// + /// + /// + /// + /// + /// + public void UpdatePrimPosition(User_Agent_info User,LLVector3 position,uint LocalID,bool setRotation, LLQuaternion rotation) { - prim_info pri=null; - foreach (KeyValuePair kp in this.Prim_list) + PrimInfo pri=null; + foreach (KeyValuePair kp in this.PrimList) { - if(kp.Value.local_ID==l_id) + if(kp.Value.LocalID==LocalID) { pri=kp.Value; } @@ -127,18 +147,37 @@ namespace Second_server { return; } - uint ID=pri.local_ID; + uint ID=pri.LocalID; + libsecondlife.LLVector3 pos2=new LLVector3(position.X,position.Y,position.Z); + libsecondlife.LLQuaternion rotation2; + if(!setRotation) + { + pri.Position=pos2; + rotation2=new LLQuaternion(pri.Rotation.X,pri.Rotation.Y,pri.Rotation.Z,pri.Rotation.W); + } + else + { + rotation2=new LLQuaternion(rotation.X,rotation.Y,rotation.Z,rotation.W); + + pos2=pri.Position; + pri.Rotation=rotation; + } + rotation2.W+=1; + rotation2.X+=1; + rotation2.Y+=1; + rotation2.Z+=1; + byte[] bytes=new byte[60]; ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket(); - im.RegionData.RegionHandle=1096213093147648; + im.RegionData.RegionHandle=Globals.Instance.RegionHandle; im.RegionData.TimeDilation=64096; im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; int i=0; ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); im.ObjectData[0]=dat; - dat.TextureEntry=object_template.TextureEntry; - libsecondlife.LLVector3 pos2=new LLVector3(x,y,z); + dat.TextureEntry=PrimTemplate.TextureEntry; + //System.Console.WriteLine("new position is :"+position); bytes[i++] = (byte)(ID % 256); bytes[i++] = (byte)((ID >> 8) % 256); @@ -151,7 +190,7 @@ namespace Second_server // bytes[i++]=128; // bytes[i++]=63; byte[] pb=pos2.GetBytes(); - pri.pos=pos2; + pri.Position=pos2; Array.Copy(pb,0,bytes,i,pb.Length); i+=12; ushort ac=32767; @@ -172,16 +211,36 @@ namespace Second_server bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)((ac >> 8) % 256); - //rot - bytes[i++] = (byte)(ac % 256); - bytes[i++] = (byte)((ac >> 8) % 256); - bytes[i++] = (byte)(ac % 256); - bytes[i++] = (byte)((ac >> 8) % 256); - bytes[i++] = (byte)(ac % 256); - bytes[i++] = (byte)((ac >> 8) % 256); - bytes[i++] = (byte)(ac % 256); - bytes[i++] = (byte)((ac >> 8) % 256); + //if(setRotation) + //{ + ushort rw, rx,ry,rz; + rw=(ushort)(32768*rotation2.W); + rx=(ushort)(32768*rotation2.X); + ry=(ushort)(32768*rotation2.Y); + rz=(ushort)(32768*rotation2.Z); + + //rot + bytes[i++] = (byte)(rx % 256); + bytes[i++] = (byte)((rx >> 8) % 256); + bytes[i++] = (byte)(ry % 256); + bytes[i++] = (byte)((ry >> 8) % 256); + bytes[i++] = (byte)(rz % 256); + bytes[i++] = (byte)((rz >> 8) % 256); + bytes[i++] = (byte)(rw % 256); + bytes[i++] = (byte)((rw >> 8) % 256); + //} + /*else + { + bytes[i++] = (byte)(ac % 256); + bytes[i++] = (byte)((ac >> 8) % 256); + bytes[i++] = (byte)(ac % 256); + bytes[i++] = (byte)((ac >> 8) % 256); + bytes[i++] = (byte)(ac % 256); + bytes[i++] = (byte)((ac >> 8) % 256); + bytes[i++] = (byte)(ac % 256); + bytes[i++] = (byte)((ac >> 8) % 256); + }*/ //rotation vel bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)((ac >> 8) % 256); @@ -193,23 +252,32 @@ namespace Second_server dat.Data=bytes; //server.SendPacket(im,true,user); //should send to all users. - foreach (KeyValuePair kp in agent_man.Agent_list) + foreach (KeyValuePair kp in Agent_Manager.AgentList) { - if(kp.Value.Net_info.AgentID!=user.AgentID) + if(kp.Value.NetInfo.AgentID!=User.AgentID) { - server.SendPacket(im,true,kp.Value.Net_info); + server.SendPacket(im,true,kp.Value.NetInfo); } } } - public void send_existing_prims(User_Agent_info user) + + /// + /// + /// + /// + public void SendExistingPrims(User_Agent_info user) { //send data for already created prims to a new joining user } - //************************************************************** - public void setuptemplates(string name) + + /// + /// + /// + /// + public void SetupTemplates(string name) { ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; + objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle; objupdate.RegionData.TimeDilation=64096; objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -224,7 +292,7 @@ namespace Second_server libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i); objupdate.ObjectData[0]=objdata; - this.object_template=objdata; + this.PrimTemplate=objdata; objdata.UpdateFlags=objdata.UpdateFlags+12-16+32+256; objdata.OwnerID=new LLUUID("00000000-0000-0000-0000-000000000000"); //test adding a new texture to object , to test image downloading @@ -235,8 +303,13 @@ namespace Second_server objdata.TextureEntry=ntex.ToBytes(); } - //******************************************************************** - public void Read_Prim_database(string name,User_Agent_info user) + + /// + /// + /// + /// + /// + public void ReadPrimDatabase(string name,User_Agent_info user) { StreamReader SR; string line; @@ -253,7 +326,7 @@ namespace Second_server int num=Convert.ToInt32(comp[2]); int start=Convert.ToInt32(comp[1]); ObjectUpdatePacket objupdate=new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle=1096213093147648; + objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle; objupdate.RegionData.TimeDilation=64096; objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[num]; @@ -285,24 +358,44 @@ namespace Second_server } } - public class prim_info + public class PrimInfo { - public LLVector3 pos; - public LLVector3 vel; - public uint local_ID; - public LLUUID full_ID; - public prim_data data; + public LLVector3 Position; + public LLVector3 Velocity; + public LLQuaternion Rotation=LLQuaternion.Identity; + public uint LocalID; + public LLUUID FullID; + public PrimData data; - public prim_info() + public PrimInfo() { - pos=new LLVector3(0,0,0); - vel=new LLVector3(0,0,0); - data=new prim_data(); + Position=new LLVector3(0,0,0); + Velocity=new LLVector3(0,0,0); + //data=new PrimData(); } } - public class prim_data + public class PrimData { - public prim_data() + public LLUUID OwnerID; + public byte PCode; + public byte PathBegin; + public byte PathEnd; + public byte PathScaleX; + public byte PathScaleY; + public byte PathShearX; + public byte PathShearY; + public sbyte PathSkew; + public byte ProfileBegin; + public byte ProfileEnd; + public LLVector3 Scale; + public byte PathCurve; + public byte ProfileCurve; + public uint ParentID=0; + public byte ProfileHollow; + + public bool DataBaseStorage=false; + + public PrimData() { } diff --git a/Script_manager.cs b/Script_manager.cs index 87f2eca082..354247b9c4 100644 --- a/Script_manager.cs +++ b/Script_manager.cs @@ -33,18 +33,18 @@ using System.Collections; //using LuaInterface; using libsecondlife; -namespace Second_server +namespace OpenSim { /// /// Description of Script_manager. /// - public class Script_manager + public class ScriptManager { //public LuaInterface.Lua Lu; //private ArrayList scripts; //private prim_info current_prim; - public Script_manager() + public ScriptManager() { } @@ -54,36 +54,52 @@ namespace Second_server //register any lua routines , like check finish script one Lu.OpenMathLib(); }*/ - public void script_register( script_object_interface script) + + private void RegisterFunctions() { - //called by scripts to register themselves + //lu.RegisterFunction( "RegisterScript",this,this.GetType().GetMethod("ScriptRegister")); + //lu.RegisterFunction( "MoveObject",this,this.GetType().GetMethod("MoveObject")); + //lu.RegisterFunction( "Say",this,this.GetType().GetMethod("Say")); + } - public void Call_tick(prim_info prim) + public void Call_tick(PrimInfo prim) { //set current prim and then call tick function in linked script } - public void Call_click(prim_info prim) + public void Call_touch(PrimInfo prim) { //set current prim and then call clicked function in linked script } - private void Register_functions() + public void Call_on_rex(PrimInfo prim) { - //lu.RegisterFunction( "register_script",this,this.GetType().GetMethod("script_register")); - //lu.RegisterFunction( "Move_object",this,this.GetType().GetMethod("Move_object")); - + //set current prim and then call clicked function in linked script + } - //Lua registered functions - public void Move_object(float x ,float y, float z) + + #region Lua Functions + + public void ScriptRegister( script_object_interface script) + { + //called by scripts to register themselves + } + public void MoveObject(float x ,float y, float z) { } + public void Say(string message) + { + + } + #endregion + } public interface script_object_interface { - void Frame_tick(); - void clicked(); + void frame_tick(); + void touch(int num); + void on_rex(int num); } } diff --git a/Second-server.csproj b/Second-server.csproj index 79db97f405..bb1c558dbb 100644 --- a/Second-server.csproj +++ b/Second-server.csproj @@ -1,8 +1,8 @@  Exe - Controller - Second-server + OpenSim + OpenSim Debug AnyCPU {132A6E3E-8F2D-4BF5-BDFB-8555F53F334E} @@ -35,6 +35,10 @@ + + bin\Release\libsecondlife.dll + False + @@ -47,12 +51,9 @@ - - - - {D9CDEDFB-8169-4B03-B57F-0DF638F044EC} - libsecondlife - + + + \ No newline at end of file diff --git a/Second-server.sln b/Second-server.sln index 9cdd672206..2575f51a94 100644 --- a/Second-server.sln +++ b/Second-server.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +# SharpDevelop 2.1.0.2017 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Second-server", "Second-server.csproj", "{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "libsecondlife", "..\..\libsecondlife\libsecondlife-cs\libsecondlife.csproj", "{D9CDEDFB-8169-4B03-B57F-0DF638F044EC}" @@ -27,6 +27,8 @@ Global {D9CDEDFB-8169-4B03-B57F-0DF638F044EC}.Release|.NET 1.1.Build.0 = Release|.NET 1.1 {D9CDEDFB-8169-4B03-B57F-0DF638F044EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9CDEDFB-8169-4B03-B57F-0DF638F044EC}.Release|Any CPU.Build.0 = Release|Any CPU + {132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Debug|.NET 1.1.Build.0 = Debug|.NET 1.1 + {132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Release|.NET 1.1.Build.0 = Release|.NET 1.1 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Server.cs b/Server.cs index 7bc4050fee..342592a07e 100644 --- a/Server.cs +++ b/Server.cs @@ -37,16 +37,17 @@ using System.Timers; //really hacked , messy code -namespace Second_server +namespace OpenSim { /// /// Description of Server. /// - public interface Server_callback + public interface ServerCallback { - void main_callback(Packet pack, User_Agent_info User_info); - void new_user(User_Agent_info User_info); - void error(string text); + //should replace with delegates + void MainCallback(Packet pack, User_Agent_info User_info); + void NewUserCallback(User_Agent_info User_info); + void ErrorCallback(string text); } public class Server { @@ -91,7 +92,7 @@ namespace Second_server get { return connected; } } - private Server_callback callback_object; + private ServerCallback CallbackObject; //private NetworkManager Network; // private Dictionary> Callbacks; private uint Sequence = 0; @@ -125,10 +126,10 @@ namespace Second_server /// /// /// - public Server(Server_callback s_callback) + public Server(ServerCallback s_callback) { - this.callback_object=s_callback; + this.CallbackObject=s_callback; // Client = client; // Network = client.Network; // Callbacks = callbacks; @@ -148,7 +149,7 @@ namespace Second_server // Create an endpoint that we will be communicating with (need it in two // types due to .NET weirdness) // ipEndPoint = new IPEndPoint(ip, port); - ipEndPoint = new IPEndPoint(IPAddress.Any, 1000); + ipEndPoint = new IPEndPoint(IPAddress.Any, Globals.Instance.IpPort); endPoint = (EndPoint)ipEndPoint; @@ -486,7 +487,7 @@ namespace Second_server new_user.endpoint=epSender; new_user.Inbox = new Queue(Settings.INBOX_SIZE); - this.callback_object.new_user(new_user); + this.CallbackObject.NewUserCallback(new_user); this.User_agents.Add(new_user); } @@ -526,14 +527,14 @@ namespace Second_server { //error finding agent - this.callback_object.error("no user found"); + this.CallbackObject.ErrorCallback("no user found"); return; } // Fail-safe check if (packet == null) { - this.callback_object.error("couldn't build packet"); + this.CallbackObject.ErrorCallback("couldn't build packet"); // Client.Log("Couldn't build a message from the incoming data", Helpers.LogLevel.Warning); return; } @@ -615,7 +616,7 @@ namespace Second_server } // this.callback_object.error("calling callback"); - this.callback_object.main_callback(packet,User_info); + this.CallbackObject.MainCallback(packet,User_info); // this.callback_object.error("finished"); // Fire the registered packet events #region FireCallbacks diff --git a/Texture_manager.cs b/Texture_manager.cs index 1321358c16..0d88041e1f 100644 --- a/Texture_manager.cs +++ b/Texture_manager.cs @@ -36,26 +36,26 @@ using libsecondlife.AssetSystem; using System.IO; -namespace Second_server +namespace OpenSim { /// /// Description of Texture_manager. /// - public class Texture_manager + public class TextureManager { - public Dictionary textures; + public Dictionary textures; public ArrayList requests=new ArrayList(); //should change to a generic public ArrayList uploads=new ArrayList(); private Server server; - public Texture_manager(Server serve) + public TextureManager(Server serve) { server=serve; - textures=new Dictionary (); + textures=new Dictionary (); this.initialise(); } - public void add_request(User_Agent_info user, LLUUID image_id) + public void AddRequest(User_Agent_info user, LLUUID image_id) { if(!this.textures.ContainsKey(image_id)) @@ -66,10 +66,10 @@ namespace Second_server server.SendPacket(im_not,true,user); return; } - Texture_image imag=this.textures[image_id]; - Texture_request req=new Texture_request(); - req.req_user=user; - req.req_image=image_id; + TextureImage imag=this.textures[image_id]; + TextureRequest req=new TextureRequest(); + req.RequestUser=user; + req.RequestImage=image_id; req.image_info=imag; if(imag.data.LongLength>1000) //should be bigger or smaller? @@ -87,11 +87,11 @@ namespace Second_server } - public void add_texture(LLUUID image_id, string name, byte[] data) + public void AddTexture(LLUUID image_id, string name, byte[] data) { } - public void Do_work(ulong time) + public void DoWork(ulong time) { if(this.requests.Count==0) { @@ -109,10 +109,10 @@ namespace Second_server { num=5; } - Texture_request req; + TextureRequest req; for(int i=0; i