Basic Inventory support and clean up

brokenplugins
MW 2007-02-03 21:09:54 +00:00
parent c113086dcd
commit dc2316de9c
7 changed files with 500 additions and 639 deletions

View File

@ -207,30 +207,18 @@ namespace OpenSim
/// <param name="name"></param> /// <param name="name"></param>
private void SetupTemplate(string name) private void SetupTemplate(string name)
{ {
/*ObjectUpdatePacket objupdate=new ObjectUpdatePacket();
objupdate.RegionData.RegionHandle=1096213093147648;
objupdate.RegionData.TimeDilation=64096;
objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
*/
int i=0; int i=0;
FileInfo fInfo = new FileInfo(name); FileInfo fInfo = new FileInfo(name);
long numBytes = fInfo.Length; long numBytes = fInfo.Length;
FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read); FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream); BinaryReader br = new BinaryReader(fStream);
byte [] data1 = br.ReadBytes((int)numBytes); byte [] data1 = br.ReadBytes((int)numBytes);
br.Close(); br.Close();
fStream.Close(); fStream.Close();
libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i); libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i);
//objupdate.ObjectData[0]=objdata;
System.Text.Encoding enc = System.Text.Encoding.ASCII; System.Text.Encoding enc = System.Text.Encoding.ASCII;
libsecondlife.LLVector3 pos=new LLVector3(objdata.ObjectData, 16); libsecondlife.LLVector3 pos=new LLVector3(objdata.ObjectData, 16);
pos.X=100f; pos.X=100f;
@ -238,8 +226,7 @@ namespace OpenSim
objdata.NameValue=enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); objdata.NameValue=enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0");
libsecondlife.LLVector3 pos2=new LLVector3(13.981f,100.0f,20.0f); libsecondlife.LLVector3 pos2=new LLVector3(13.981f,100.0f,20.0f);
//objdata.FullID=user.AgentID; //objdata.FullID=user.AgentID;
byte[] pb=pos.GetBytes(); byte[] pb=pos.GetBytes();
Array.Copy(pb,0,objdata.ObjectData,16,pb.Length); Array.Copy(pb,0,objdata.ObjectData,16,pb.Length);
AvatarTemplate=objdata; AvatarTemplate=objdata;
@ -254,50 +241,50 @@ namespace OpenSim
{ {
//shouldn't 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\"; string data_path=System.AppDomain.CurrentDomain.BaseDirectory + @"\layer_data\";
//send layerdata //send layerdata
LayerDataPacket layerpack=new LayerDataPacket(); LayerDataPacket layerpack=new LayerDataPacket();
layerpack.LayerID.Type=76; layerpack.LayerID.Type=76;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata0.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata0.dat");
LayerDataPacket layerpack1=new LayerDataPacket(); LayerDataPacket layerpack1=new LayerDataPacket();
layerpack1.LayerID.Type=76; layerpack1.LayerID.Type=76;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata1.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata1.dat");
LayerDataPacket layerpack2=new LayerDataPacket(); LayerDataPacket layerpack2=new LayerDataPacket();
layerpack2.LayerID.Type=56; layerpack2.LayerID.Type=56;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata2.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata2.dat");
LayerDataPacket layerpack3=new LayerDataPacket(); LayerDataPacket layerpack3=new LayerDataPacket();
layerpack3.LayerID.Type=55; layerpack3.LayerID.Type=55;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata3.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata3.dat");
LayerDataPacket layerpack4=new LayerDataPacket(); LayerDataPacket layerpack4=new LayerDataPacket();
layerpack4.LayerID.Type=56; layerpack4.LayerID.Type=56;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata4.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata4.dat");
LayerDataPacket layerpack5=new LayerDataPacket(); LayerDataPacket layerpack5=new LayerDataPacket();
layerpack5.LayerID.Type=55; layerpack5.LayerID.Type=55;
this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata5.dat"); this.SendLayerData(User_info,ref layerpack,data_path+@"layerdata5.dat");
//send intial set of captured prims data? //send intial set of captured prims data?
this.Prim_Manager.ReadPrimDatabase( "objectdatabase.ini",User_info); this.Prim_Manager.ReadPrimDatabase( "objectdatabase.ini",User_info);
//send prims that have been created by users //send prims that have been created by users
//prim_man.send_existing_prims(User_info); //prim_man.send_existing_prims(User_info);
//send update about clients avatar //send update about clients avatar
this.SendInitialAvatarPosition(User_info); this.SendInitialAvatarPosition(User_info);
//send updates about all other users //send updates about all other users
foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList) foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList)
{
if(kp.Value.NetInfo.AgentID!=User_info.AgentID)
{ {
if(kp.Value.NetInfo.AgentID!=User_info.AgentID) this.SendOtherAvatarPosition(User_info,kp.Value);
{ }
this.SendOtherAvatarPosition(User_info,kp.Value); }
}
}
} }
/// <summary> /// <summary>
@ -456,26 +443,26 @@ namespace OpenSim
/// <param name="line"></param> /// <param name="line"></param>
public void SendChatMessage(User_Agent_info User_info, string line) public void SendChatMessage(User_Agent_info User_info, string line)
{ {
libsecondlife.Packets.ChatFromSimulatorPacket reply=new ChatFromSimulatorPacket(); libsecondlife.Packets.ChatFromSimulatorPacket reply=new ChatFromSimulatorPacket();
reply.ChatData.Audible=1; reply.ChatData.Audible=1;
reply.ChatData.Message=enc.GetBytes(line); reply.ChatData.Message=enc.GetBytes(line);
reply.ChatData.ChatType=1; reply.ChatData.ChatType=1;
reply.ChatData.SourceType=1; reply.ChatData.SourceType=1;
reply.ChatData.Position=new LLVector3(120,100,21); //should set to actual position reply.ChatData.Position=new LLVector3(120,100,21); //should set to actual position
reply.ChatData.FromName=enc.GetBytes(User_info.first_name +" "+User_info.last_name +"\0"); //enc.GetBytes("Echo: \0"); //and actual name reply.ChatData.FromName=enc.GetBytes(User_info.first_name +" "+User_info.last_name +"\0"); //enc.GetBytes("Echo: \0"); //and actual name
reply.ChatData.OwnerID=User_info.AgentID; reply.ChatData.OwnerID=User_info.AgentID;
reply.ChatData.SourceID=User_info.AgentID; reply.ChatData.SourceID=User_info.AgentID;
//echo to sender //echo to sender
server.SendPacket(reply,true,User_info); server.SendPacket(reply,true,User_info);
//send to all users //send to all users
foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList) foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList)
{ {
if(kp.Value.NetInfo.AgentID!=User_info.AgentID) if(kp.Value.NetInfo.AgentID!=User_info.AgentID)
{ {
server.SendPacket(reply,true,kp.Value.NetInfo); server.SendPacket(reply,true,kp.Value.NetInfo);
} }
} }
} }
/// <summary> /// <summary>
@ -490,121 +477,121 @@ namespace OpenSim
/// <param name="body"></param> /// <param name="body"></param>
public void SendMoveCommand(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; uint ID=user.localID;
//ID=av_id; //ID=av_id;
byte[] bytes=new byte[60]; byte[] bytes=new byte[60];
ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket(); ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket();
im.RegionData.RegionHandle=Globals.Instance.RegionHandle;; im.RegionData.RegionHandle=Globals.Instance.RegionHandle;;
im.RegionData.TimeDilation=64096; im.RegionData.TimeDilation=64096;
im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
int i=0; int i=0;
ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
im.ObjectData[0]=dat; im.ObjectData[0]=dat;
dat.TextureEntry=AvatarTemplate.TextureEntry; dat.TextureEntry=AvatarTemplate.TextureEntry;
libsecondlife.LLVector3 pos2=new LLVector3(x,y,z); libsecondlife.LLVector3 pos2=new LLVector3(x,y,z);
bytes[i++] = (byte)(ID % 256); bytes[i++] = (byte)(ID % 256);
bytes[i++] = (byte)((ID >> 8) % 256); bytes[i++] = (byte)((ID >> 8) % 256);
bytes[i++] = (byte)((ID >> 16) % 256); bytes[i++] = (byte)((ID >> 16) % 256);
bytes[i++] = (byte)((ID >> 24) % 256); bytes[i++] = (byte)((ID >> 24) % 256);
bytes[i++]=0; bytes[i++]=0;
bytes[i++]=1; bytes[i++]=1;
i+=14; i+=14;
bytes[i++]=128; bytes[i++]=128;
bytes[i++]=63; bytes[i++]=63;
byte[] pb=pos2.GetBytes(); byte[] pb=pos2.GetBytes();
Array.Copy(pb,0,bytes,i,pb.Length); Array.Copy(pb,0,bytes,i,pb.Length);
i+=12; i+=12;
ushort ac=32767; ushort ac=32767;
Axiom.MathLib.Vector3 v3=new Axiom.MathLib.Vector3(1,0,0); Axiom.MathLib.Vector3 v3=new Axiom.MathLib.Vector3(1,0,0);
Axiom.MathLib.Quaternion q=new Axiom.MathLib.Quaternion(body.W,body.X,body.Y,body.Z); Axiom.MathLib.Quaternion q=new Axiom.MathLib.Quaternion(body.W,body.X,body.Y,body.Z);
Axiom.MathLib.Vector3 direc=q*v3; Axiom.MathLib.Vector3 direc=q*v3;
direc.Normalize(); direc.Normalize();
direc=direc*(0.03f); direc=direc*(0.03f);
direc.x+=1; direc.x+=1;
direc.y+=1; direc.y+=1;
direc.z+=1; direc.z+=1;
ushort dx,dy,dz; ushort dx,dy,dz;
dx=(ushort)(32768*direc.x); dx=(ushort)(32768*direc.x);
dy=(ushort)(32768*direc.y); dy=(ushort)(32768*direc.y);
dz=(ushort)(32768*direc.z); dz=(ushort)(32768*direc.z);
//vel //vel
if(!stop) if(!stop)
{ {
bytes[i++] = (byte)(dx % 256); bytes[i++] = (byte)(dx % 256);
bytes[i++] = (byte)((dx >> 8) % 256); bytes[i++] = (byte)((dx >> 8) % 256);
bytes[i++] = (byte)(dy % 256); bytes[i++] = (byte)(dy % 256);
bytes[i++] = (byte)((dy >> 8) % 256); bytes[i++] = (byte)((dy >> 8) % 256);
bytes[i++] = (byte)(dz % 256); bytes[i++] = (byte)(dz % 256);
bytes[i++] = (byte)((dz >> 8) % 256); bytes[i++] = (byte)((dz >> 8) % 256);
} }
else else
{ {
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
} }
//accel //accel
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
//rot //rot
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
//rotation vel //rotation vel
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
dat.Data=bytes; dat.Data=bytes;
server.SendPacket(im,true,user); server.SendPacket(im,true,user);
//should send to all users. //should send to all users.
foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList) foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in this.AgentList)
{ {
if(kp.Value.NetInfo.AgentID!=user.AgentID) if(kp.Value.NetInfo.AgentID!=user.AgentID)
{ {
server.SendPacket(im,true,kp.Value.NetInfo); server.SendPacket(im,true,kp.Value.NetInfo);
} }
} }
} }
/// <summary> /// <summary>

View File

@ -72,14 +72,14 @@ namespace OpenSim
AssetInfo Asset=new AssetInfo(); AssetInfo Asset=new AssetInfo();
Asset.filename="base_shape.dat"; Asset.filename="base_shape.dat";
Asset.Full_ID=new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); Asset.Full_ID=new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
this.LoadAsset(Asset); this.LoadAsset(Asset, false);
this.Assets.Add(Asset.Full_ID,Asset); this.Assets.Add(Asset.Full_ID, Asset);
Asset=new AssetInfo(); Asset=new AssetInfo();
Asset.filename="base_skin.dat"; Asset.filename="base_skin.dat";
Asset.Full_ID=new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49"); Asset.Full_ID=new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49");
this.LoadAsset(Asset); this.LoadAsset(Asset, false);
this.Assets.Add(Asset.Full_ID,Asset); this.Assets.Add(Asset.Full_ID, Asset);
//our test images //our test images
//Change these filenames to images you want to use. //Change these filenames to images you want to use.
@ -87,20 +87,20 @@ namespace OpenSim
Image.filename="testpic2.jp2"; Image.filename="testpic2.jp2";
Image.Full_ID=new LLUUID("00000000-0000-0000-5005-000000000005"); Image.Full_ID=new LLUUID("00000000-0000-0000-5005-000000000005");
Image.Name="test Texture"; Image.Name="test Texture";
this.LoadImage(Image); this.LoadAsset(Image, true);
this.Textures.Add(Image.Full_ID,Image); this.Textures.Add(Image.Full_ID, Image);
Image=new TextureImage(); Image=new TextureImage();
Image.filename="map_base.jp2"; Image.filename="map_base.jp2";
Image.Full_ID=new LLUUID("00000000-0000-0000-7007-000000000006"); Image.Full_ID=new LLUUID("00000000-0000-0000-7007-000000000006");
this.LoadImage(Image); this.LoadAsset(Image, true);
this.Textures.Add(Image.Full_ID,Image); this.Textures.Add(Image.Full_ID, Image);
Image=new TextureImage(); Image=new TextureImage();
Image.filename="map1.jp2"; Image.filename="map1.jp2";
Image.Full_ID=new LLUUID("00000000-0000-0000-7009-000000000008"); Image.Full_ID=new LLUUID("00000000-0000-0000-7009-000000000008");
this.LoadImage(Image); this.LoadAsset(Image, true);
this.Textures.Add(Image.Full_ID,Image); this.Textures.Add(Image.Full_ID, Image);
} }
/// <summary> /// <summary>
@ -129,7 +129,7 @@ namespace OpenSim
Transfer.TransferInfo.Size=info.data.Length; Transfer.TransferInfo.Size=info.data.Length;
Transfer.TransferInfo.TransferID=TransferRequest.TransferInfo.TransferID; Transfer.TransferInfo.TransferID=TransferRequest.TransferInfo.TransferID;
server.SendPacket(Transfer,true,UserInfo); server.SendPacket(Transfer, true, UserInfo);
TransferPacketPacket TransferPacket=new TransferPacketPacket(); TransferPacketPacket TransferPacket=new TransferPacketPacket();
TransferPacket.TransferData.Packet=0; TransferPacket.TransferData.Packet=0;
@ -148,16 +148,16 @@ namespace OpenSim
TransferPacket.TransferData.ChannelType=2; TransferPacket.TransferData.ChannelType=2;
TransferPacket.TransferData.TransferID=TransferRequest.TransferInfo.TransferID; TransferPacket.TransferData.TransferID=TransferRequest.TransferInfo.TransferID;
byte[] chunk1=new byte[(info.data.Length-1000)]; byte[] chunk1=new byte[(info.data.Length-1000)];
Array.Copy(info.data,1000,chunk1,0,chunk1.Length); Array.Copy(info.data, 1000, chunk1, 0, chunk1.Length);
TransferPacket.TransferData.Data=chunk1; TransferPacket.TransferData.Data=chunk1;
TransferPacket.TransferData.Status=1; TransferPacket.TransferData.Status=1;
server.SendPacket(TransferPacket,true,UserInfo); server.SendPacket(TransferPacket, true, UserInfo);
} }
else else
{ {
TransferPacket.TransferData.Status=1; //last packet? so set to 1 TransferPacket.TransferData.Status=1; //last packet? so set to 1
TransferPacket.TransferData.Data=info.data; TransferPacket.TransferData.Data=info.data;
server.SendPacket(TransferPacket,true,UserInfo); server.SendPacket(TransferPacket, true, UserInfo);
} }
} }
@ -166,12 +166,12 @@ namespace OpenSim
{ {
//Create Folders //Create Folders
LLUUID BaseFolder=Avata.BaseFolder; LLUUID BaseFolder=Avata.BaseFolder;
InventoryManager.CreateNewFolder(UserInfo,Avata.InventoryFolder); InventoryManager.CreateNewFolder(UserInfo, Avata.InventoryFolder);
InventoryManager.CreateNewFolder(UserInfo, BaseFolder); InventoryManager.CreateNewFolder(UserInfo, BaseFolder);
//Give a copy of default shape //Give a copy of default shape
AssetInfo Base=this.Assets[new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73")]; AssetInfo Base=this.Assets[new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73")];
AssetInfo Shape=this.CloneAsset(UserInfo.AgentID,Base); AssetInfo Shape=this.CloneAsset(UserInfo.AgentID, Base);
Shape.filename=""; Shape.filename="";
Shape.Name="Default Shape"; Shape.Name="Default Shape";
@ -180,15 +180,15 @@ namespace OpenSim
Shape.Type=libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY; Shape.Type=libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY;
byte[] Agentid=enc.GetBytes(UserInfo.AgentID.ToStringHyphenated()); byte[] Agentid=enc.GetBytes(UserInfo.AgentID.ToStringHyphenated());
Array.Copy(Agentid,0,Shape.data,294,Agentid.Length); Array.Copy(Agentid, 0, Shape.data, 294, Agentid.Length);
this.Assets.Add(Shape.Full_ID,Shape); this.Assets.Add(Shape.Full_ID, Shape);
Avata.Wearables[0].ItemID=InventoryManager.AddToInventory(UserInfo,BaseFolder,Shape); Avata.Wearables[0].ItemID=InventoryManager.AddToInventory(UserInfo, BaseFolder, Shape);
Avata.Wearables[0].AssetID=Shape.Full_ID; Avata.Wearables[0].AssetID=Shape.Full_ID;
//Give copy of default skin //Give copy of default skin
Base=this.Assets[new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49")]; Base=this.Assets[new LLUUID("e0ee49b5a4184df8d3c9a65361fe7f49")];
AssetInfo Skin=this.CloneAsset(UserInfo.AgentID,Base); AssetInfo Skin=this.CloneAsset(UserInfo.AgentID, Base);
Skin.filename=""; Skin.filename="";
Skin.Name="Default Skin"; Skin.Name="Default Skin";
@ -197,25 +197,33 @@ namespace OpenSim
Skin.Type=libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY; Skin.Type=libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY;
Array.Copy(Agentid,0,Skin.data,238,Agentid.Length); Array.Copy(Agentid,0,Skin.data,238,Agentid.Length);
this.Assets.Add(Skin.Full_ID,Skin); this.Assets.Add(Skin.Full_ID, Skin);
Avata.Wearables[1].ItemID=InventoryManager.AddToInventory(UserInfo,BaseFolder,Skin); Avata.Wearables[1].ItemID=InventoryManager.AddToInventory(UserInfo, BaseFolder, Skin);
Avata.Wearables[1].AssetID=Skin.Full_ID; Avata.Wearables[1].AssetID=Skin.Full_ID;
//give a copy of test texture //give a copy of test texture
TextureImage Texture=this.CloneImage(UserInfo.AgentID,Textures[new LLUUID("00000000-0000-0000-5005-000000000005")]); TextureImage Texture=this.CloneImage(UserInfo.AgentID,Textures[new LLUUID("00000000-0000-0000-5005-000000000005")]);
this.Textures.Add(Texture.Full_ID,Texture); this.Textures.Add(Texture.Full_ID, Texture);
InventoryManager.AddToInventory(UserInfo,BaseFolder,Texture); InventoryManager.AddToInventory(UserInfo, BaseFolder, Texture);
} }
private void LoadAsset(AssetInfo info) private void LoadAsset(AssetBase info, bool Image)
{ {
//should request Asset from storage manager //should request Asset from storage manager
//but for now read from file //but for now read from file
string folder;
string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\assets\"; if(Image)
{
folder=@"\textures\";
}
else
{
folder=@"\assets\";
}
string data_path = System.AppDomain.CurrentDomain.BaseDirectory + folder;
string filename=data_path+@info.filename; string filename=data_path+@info.filename;
FileInfo fInfo = new FileInfo(filename); FileInfo fInfo = new FileInfo(filename);
@ -228,7 +236,7 @@ namespace OpenSim
br.Close(); br.Close();
fStream.Close(); fStream.Close();
info.data=idata; info.data=idata;
info.loaded=true; //info.loaded=true;
} }
public AssetInfo CloneAsset(LLUUID NewOwner, AssetInfo SourceAsset) public AssetInfo CloneAsset(LLUUID NewOwner, AssetInfo SourceAsset)
@ -252,7 +260,7 @@ namespace OpenSim
//not found image so send back image not in data base message //not found image so send back image not in data base message
ImageNotInDatabasePacket im_not=new ImageNotInDatabasePacket(); ImageNotInDatabasePacket im_not=new ImageNotInDatabasePacket();
im_not.ImageID.ID=image_id; im_not.ImageID.ID=image_id;
server.SendPacket(im_not,true,user); server.SendPacket(im_not, true, user);
return; return;
} }
TextureImage imag=this.Textures[image_id]; TextureImage imag=this.Textures[image_id];
@ -348,27 +356,6 @@ namespace OpenSim
} }
private void LoadImage(TextureImage im)
{
//should request Image from StorageManager
//but for now read from file
string data_path=System.AppDomain.CurrentDomain.BaseDirectory + @"\textures\";
string filename=data_path+@im.filename;
FileInfo fInfo = new FileInfo(filename);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] idata=new byte[numBytes];
BinaryReader br = new BinaryReader(fStream);
idata= br.ReadBytes((int)numBytes);
br.Close();
fStream.Close();
im.data=idata;
im.loaded=true;
}
public TextureImage CloneImage(LLUUID NewOwner,TextureImage Source) public TextureImage CloneImage(LLUUID NewOwner,TextureImage Source)
{ {
TextureImage NewImage=new TextureImage(); TextureImage NewImage=new TextureImage();
@ -401,7 +388,6 @@ namespace OpenSim
{ {
//public byte[] data; //public byte[] data;
//public LLUUID Full_ID; //public LLUUID Full_ID;
public string filename;
public bool loaded; public bool loaded;
public ulong last_used; //need to add a tick/time counter and keep record public ulong last_used; //need to add a tick/time counter and keep record
// of how often images are requested to unload unused ones. // of how often images are requested to unload unused ones.
@ -420,13 +406,14 @@ namespace OpenSim
public sbyte InvType; public sbyte InvType;
public string Name; public string Name;
public string Description; public string Description;
public string filename;
public AssetBase() public AssetBase()
{ {
} }
} }
public class TextureRequest public class TextureRequest
{ {
public User_Agent_info RequestUser; public User_Agent_info RequestUser;
public LLUUID RequestImage; public LLUUID RequestImage;
@ -442,13 +429,13 @@ namespace OpenSim
} }
public class TextureImage: AssetBase public class TextureImage: AssetBase
{ {
//any need for this class now most has been moved into AssetBase?
//public byte[] data; //public byte[] data;
//public LLUUID Full_ID; //public LLUUID Full_ID;
//public string name; //public string name;
public string filename;
public bool loaded; public bool loaded;
public ulong last_used; //need to add a tick/time counter and keep record public ulong last_used; //need to add a tick/time counter and keep record
// of how often images are requested to unload unused ones. // of how often images are requested to unload unused ones.
public TextureImage() public TextureImage()
{ {

View File

@ -58,7 +58,6 @@ namespace OpenSim
public Logon _login; public Logon _login;
private AgentManager Agent_Manager; private AgentManager Agent_Manager;
private PrimManager Prim_Manager; private PrimManager Prim_Manager;
// private TextureManager Texture_Manager;
private AssetManagement Asset_Manager; private AssetManagement Asset_Manager;
private GridManager Grid_Manager; private GridManager Grid_Manager;
private InventoryManager Inventory_Manager; private InventoryManager Inventory_Manager;
@ -72,21 +71,21 @@ namespace OpenSim
server = new Server( this ); server = new Server( this );
Agent_Manager = new AgentManager( this.server ); Agent_Manager = new AgentManager( this.server );
Prim_Manager = new PrimManager( this.server ); Prim_Manager = new PrimManager( this.server );
// Texture_Manager = new TextureManager( this.server );
Asset_Manager = new AssetManagement( this.server ); Asset_Manager = new AssetManagement( this.server );
Prim_Manager.Agent_Manager = Agent_Manager; Prim_Manager.Agent_Manager = Agent_Manager;
Agent_Manager.Prim_Manager = Prim_Manager; Agent_Manager.Prim_Manager = Prim_Manager;
Agent_Manager.Asset_Manager=Asset_Manager; Agent_Manager.Asset_Manager=Asset_Manager;
Inventory_Manager=new InventoryManager(this.server); Inventory_Manager=new InventoryManager(this.server);
Asset_Manager.InventoryManager=Inventory_Manager; Asset_Manager.InventoryManager=Inventory_Manager;
// Asset_Manager.TextureMan=Texture_Manager;
Grid_Manager=new GridManager(this.server,Agent_Manager); Grid_Manager=new GridManager(this.server,Agent_Manager);
if(Globals.Instance.LoginSever) if(Globals.Instance.LoginSever)
{ {
Console.WriteLine("Starting login Server"); Console.WriteLine("Starting login Server");
Login_Manager = new LoginManager(_login); // startup Login_Manager = new LoginManager(_login); // startup
Login_Manager.Startup(); // login server Login_Manager.Startup(); // login server
} }
timer1.Enabled = true; timer1.Enabled = true;
timer1.Interval = 200; timer1.Interval = 200;
timer1.Elapsed +=new ElapsedEventHandler( this.Timer1Tick ); timer1.Elapsed +=new ElapsedEventHandler( this.Timer1Tick );
@ -103,7 +102,7 @@ namespace OpenSim
//should replace with a switch //should replace with a switch
if( pack.Type == PacketType.AgentSetAppearance ) { if( pack.Type == PacketType.AgentSetAppearance ) {
// System.Console.WriteLine(pack); //System.Console.WriteLine(pack);
//this.richTextBox1.Text=this.richTextBox1.Text+"\n "+pack.Type; //this.richTextBox1.Text=this.richTextBox1.Text+"\n "+pack.Type;
} }
@ -142,11 +141,8 @@ namespace OpenSim
} }
else if( pack.Type == PacketType.TransferRequest ) { else if( pack.Type == PacketType.TransferRequest ) {
TransferRequestPacket tran = (TransferRequestPacket)pack; TransferRequestPacket tran = (TransferRequestPacket)pack;
LLUUID id = new LLUUID( tran.TransferInfo.Params, 0 ); LLUUID id = new LLUUID( tran.TransferInfo.Params, 0 );
Asset_Manager.AddAssetRequest( User_info, id, tran );
// if( ( id == new LLUUID( "66c41e39-38f9-f75a-024e-585989bfab73" ) ) || ( id == new LLUUID( "e0ee49b5a4184df8d3c9a65361fe7f49" ) ) ) {
Asset_Manager.AddAssetRequest( User_info, id, tran );
// }
} }
else if( ( pack.Type == PacketType.StartPingCheck ) ) { else if( ( pack.Type == PacketType.StartPingCheck ) ) {
@ -156,23 +152,26 @@ namespace OpenSim
endping.PingID.PingID = startp.PingID.PingID; endping.PingID.PingID = startp.PingID.PingID;
server.SendPacket( endping, true, User_info ); server.SendPacket( endping, true, User_info );
} }
else if( pack.Type == PacketType.CompleteAgentMovement ) { else if( pack.Type == PacketType.CompleteAgentMovement )
{
// new client // new client
Agent_Manager.AgentJoin( User_info ); Agent_Manager.AgentJoin( User_info );
} }
else if( pack.Type == PacketType.RequestImage ) { else if( pack.Type == PacketType.RequestImage )
{
RequestImagePacket image_req = (RequestImagePacket)pack; RequestImagePacket image_req = (RequestImagePacket)pack;
for( int i = 0; i < image_req.RequestImage.Length; i++ ) { for( int i = 0; i < image_req.RequestImage.Length; i++ )
{
this.Asset_Manager.AddTextureRequest( User_info, image_req.RequestImage[ i ].Image ); this.Asset_Manager.AddTextureRequest( User_info, image_req.RequestImage[ i ].Image );
} }
} }
else if( pack.Type == PacketType.RegionHandshakeReply ) { else if( pack.Type == PacketType.RegionHandshakeReply ) {
//recieved regionhandshake so can now start sending info //recieved regionhandshake so can now start sending info
Agent_Manager.SendInitialData( User_info ); Agent_Manager.SendInitialData( User_info );
//this.setuptemplates("objectupate164.dat",User_info,false); //this.setuptemplates("objectupate164.dat",User_info,false);
} }
else if( pack.Type == PacketType.ObjectAdd ) { else if( pack.Type == PacketType.ObjectAdd )
{
ObjectAddPacket ad = (ObjectAddPacket)pack; ObjectAddPacket ad = (ObjectAddPacket)pack;
Prim_Manager.CreatePrim( User_info, ad.ObjectData.RayEnd, ad ); Prim_Manager.CreatePrim( User_info, ad.ObjectData.RayEnd, ad );
//this.send_prim(User_info,ad.ObjectData.RayEnd, ad); //this.send_prim(User_info,ad.ObjectData.RayEnd, ad);
@ -184,7 +183,8 @@ namespace OpenSim
//System.Console.WriteLine(pack.ToString()); //System.Console.WriteLine(pack.ToString());
MultipleObjectUpdatePacket mupd = (MultipleObjectUpdatePacket)pack; MultipleObjectUpdatePacket mupd = (MultipleObjectUpdatePacket)pack;
for( int i = 0; i < mupd.ObjectData.Length; i++ ) { for( int i = 0; i < mupd.ObjectData.Length; i++ )
{
if( mupd.ObjectData[ i ].Type == 9 ) //change position if( mupd.ObjectData[ i ].Type == 9 ) //change position
{ {
libsecondlife.LLVector3 pos = new LLVector3( mupd.ObjectData[ i ].Data, 0 ); libsecondlife.LLVector3 pos = new LLVector3( mupd.ObjectData[ i ].Data, 0 );
@ -203,19 +203,23 @@ namespace OpenSim
} }
} }
} }
else if( pack.Type == PacketType.AgentWearablesRequest ) { else if( pack.Type == PacketType.AgentWearablesRequest )
{
Agent_Manager.SendIntialAvatarAppearance( User_info ); Agent_Manager.SendIntialAvatarAppearance( User_info );
} }
else if( pack.Type == PacketType.AgentUpdate ) else if( pack.Type == PacketType.AgentUpdate )
{ {
AgentUpdatePacket ag = (AgentUpdatePacket)pack; AgentUpdatePacket ag = (AgentUpdatePacket)pack;
uint mask = ag.AgentData.ControlFlags & ( 1 ); uint mask = ag.AgentData.ControlFlags & ( 1 );
AvatarData m_av = Agent_Manager.GetAgent( User_info.AgentID ); AvatarData m_av = Agent_Manager.GetAgent( User_info.AgentID );
if( m_av != null ) { if( m_av != null )
if( m_av.Started ) { {
if( mask == ( 1 ) ) { if( m_av.Started )
if( !m_av.Walk ) { {
if( mask == ( 1 ) )
{
if( !m_av.Walk )
{
//start walking //start walking
Agent_Manager.SendMoveCommand( User_info, false, m_av.Position.X, m_av.Position.Y, m_av.Position.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.Vector3 v3 = new Axiom.MathLib.Vector3( 1, 0, 0 );
@ -230,8 +234,10 @@ namespace OpenSim
m_av.Walk = true; m_av.Walk = true;
} }
} }
else { else
if( m_av.Walk ) { {
if( m_av.Walk )
{
//walking but key not pressed so need to stop //walking but key not pressed so need to stop
Agent_Manager.SendMoveCommand( User_info, true, m_av.Position.X, m_av.Position.Y, m_av.Position.Z, 0, ag.AgentData.BodyRotation ); 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.Walk = false;
@ -243,7 +249,8 @@ namespace OpenSim
} }
} }
} }
else if( pack.Type == PacketType.ChatFromViewer ) { else if( pack.Type == PacketType.ChatFromViewer )
{
ChatFromViewerPacket chat = (ChatFromViewerPacket)pack; ChatFromViewerPacket chat = (ChatFromViewerPacket)pack;
System.Text.Encoding enc = System.Text.Encoding.ASCII; System.Text.Encoding enc = System.Text.Encoding.ASCII;
@ -256,21 +263,25 @@ namespace OpenSim
line = myString; line = myString;
comp = line.Split( delimiter ); comp = line.Split( delimiter );
if( comp[ 0 ] == "pos" ) { if( comp[ 0 ] == "pos" )
{
} }
else if( comp[ 0 ] == "veloc" ) { else if( comp[ 0 ] == "veloc" )
{
} }
else { else
{
Agent_Manager.SendChatMessage( User_info, line ); Agent_Manager.SendChatMessage( User_info, line );
} }
} }
} }
} }
public void NewUserCallback( User_Agent_info UserInfo ) { 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); Console.WriteLine( "new user - {0} - has joined [session {1}]", UserInfo.AgentID.ToString(), UserInfo.SessionID.ToString() +"curcuit used"+UserInfo.circuitCode);
string first,last; string first,last;
LLUUID Base,Inventory; LLUUID Base,Inventory;
lock(_login) lock(_login)
{ {
first=_login.first; first=_login.first;

View File

@ -43,6 +43,8 @@ namespace OpenSim
public Dictionary<LLUUID, InventoryItem> Items; public Dictionary<LLUUID, InventoryItem> Items;
private Server server; private Server server;
private const uint FULL_MASK_PERMISSIONS = 2147483647;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -118,8 +120,8 @@ namespace OpenSim
InventoryFolder Folder=this.Folders[FetchDescend.InventoryData.FolderID]; InventoryFolder Folder=this.Folders[FetchDescend.InventoryData.FolderID];
InventoryDescendentsPacket Descend=new InventoryDescendentsPacket(); InventoryDescendentsPacket Descend=new InventoryDescendentsPacket();
Descend.AgentData.AgentID=User_info.AgentID; Descend.AgentData.AgentID=User_info.AgentID;
Descend.AgentData.OwnerID=Folder.OwnerID;//User_info.AgentID; Descend.AgentData.OwnerID=Folder.OwnerID;
Descend.AgentData.FolderID=FetchDescend.InventoryData.FolderID;//Folder.FolderID;//new LLUUID("4fb2dab6-a987-da66-05ee-96ca82bccbf1"); Descend.AgentData.FolderID=FetchDescend.InventoryData.FolderID;
Descend.AgentData.Descendents=Folder.Items.Count; Descend.AgentData.Descendents=Folder.Items.Count;
Descend.AgentData.Version=Folder.Items.Count; Descend.AgentData.Version=Folder.Items.Count;
@ -129,26 +131,26 @@ namespace OpenSim
InventoryItem Item=Folder.Items[i]; InventoryItem Item=Folder.Items[i];
Descend.ItemData[i]=new InventoryDescendentsPacket.ItemDataBlock(); Descend.ItemData[i]=new InventoryDescendentsPacket.ItemDataBlock();
Descend.ItemData[i].ItemID=Item.ItemID;//new LLUUID("b7878441893b094917f791174bc8401c"); Descend.ItemData[i].ItemID=Item.ItemID;
Descend.ItemData[i].AssetID=Item.AssetID;//new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); Descend.ItemData[i].AssetID=Item.AssetID;
Descend.ItemData[i].CreatorID=Item.CreatorID;//User_info.AgentID; Descend.ItemData[i].CreatorID=Item.CreatorID;
Descend.ItemData[i].BaseMask=2147483647; Descend.ItemData[i].BaseMask=FULL_MASK_PERMISSIONS;
Descend.ItemData[i].CreationDate=1000; Descend.ItemData[i].CreationDate=1000;
Descend.ItemData[i].Description=enc.GetBytes(Item.Description+"\0"); Descend.ItemData[i].Description=enc.GetBytes(Item.Description+"\0");
Descend.ItemData[i].EveryoneMask=2147483647;; Descend.ItemData[i].EveryoneMask=FULL_MASK_PERMISSIONS;
Descend.ItemData[i].Flags=1; Descend.ItemData[i].Flags=1;
Descend.ItemData[i].FolderID=Item.FolderID;//new LLUUID("4fb2dab6-a987-da66-05ee-96ca82bccbf1"); Descend.ItemData[i].FolderID=Item.FolderID;
Descend.ItemData[i].GroupID=new LLUUID("00000000-0000-0000-0000-000000000000"); Descend.ItemData[i].GroupID=new LLUUID("00000000-0000-0000-0000-000000000000");
Descend.ItemData[i].GroupMask=2147483647; Descend.ItemData[i].GroupMask=FULL_MASK_PERMISSIONS;
Descend.ItemData[i].InvType=Item.InvType; Descend.ItemData[i].InvType=Item.InvType;
Descend.ItemData[i].Name=enc.GetBytes(Item.Name+"\0"); Descend.ItemData[i].Name=enc.GetBytes(Item.Name+"\0");
Descend.ItemData[i].NextOwnerMask=2147483647; Descend.ItemData[i].NextOwnerMask=FULL_MASK_PERMISSIONS;
Descend.ItemData[i].OwnerID=Item.OwnerID;//User_info.AgentID; Descend.ItemData[i].OwnerID=Item.OwnerID;
Descend.ItemData[i].OwnerMask=2147483647;; Descend.ItemData[i].OwnerMask=FULL_MASK_PERMISSIONS;
Descend.ItemData[i].SalePrice=100; Descend.ItemData[i].SalePrice=100;
Descend.ItemData[i].SaleType=0; Descend.ItemData[i].SaleType=0;
Descend.ItemData[i].Type=Item.Type;//libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY; Descend.ItemData[i].Type=Item.Type;
Descend.ItemData[i].CRC=libsecondlife.Helpers.InventoryCRC(1000,0,Descend.ItemData[i].InvType,Descend.ItemData[i].Type,Descend.ItemData[i].AssetID ,Descend.ItemData[i].GroupID,100,Descend.ItemData[i].OwnerID,Descend.ItemData[i].CreatorID,Descend.ItemData[i].ItemID,Descend.ItemData[i].FolderID,2147483647,1,2147483647,2147483647,2147483647); Descend.ItemData[i].CRC=libsecondlife.Helpers.InventoryCRC(1000,0,Descend.ItemData[i].InvType,Descend.ItemData[i].Type,Descend.ItemData[i].AssetID ,Descend.ItemData[i].GroupID,100,Descend.ItemData[i].OwnerID,Descend.ItemData[i].CreatorID,Descend.ItemData[i].ItemID,Descend.ItemData[i].FolderID,FULL_MASK_PERMISSIONS,1,FULL_MASK_PERMISSIONS,FULL_MASK_PERMISSIONS,FULL_MASK_PERMISSIONS);
} }
server.SendPacket(Descend,true,User_info); server.SendPacket(Descend,true,User_info);
@ -177,26 +179,26 @@ namespace OpenSim
InventoryReply.AgentData.AgentID=User_info.AgentID; InventoryReply.AgentData.AgentID=User_info.AgentID;
InventoryReply.InventoryData=new FetchInventoryReplyPacket.InventoryDataBlock[1]; InventoryReply.InventoryData=new FetchInventoryReplyPacket.InventoryDataBlock[1];
InventoryReply.InventoryData[0]=new FetchInventoryReplyPacket.InventoryDataBlock(); InventoryReply.InventoryData[0]=new FetchInventoryReplyPacket.InventoryDataBlock();
InventoryReply.InventoryData[0].ItemID=Item.ItemID;//new LLUUID("b7878441893b094917f791174bc8401c"); InventoryReply.InventoryData[0].ItemID=Item.ItemID;
InventoryReply.InventoryData[0].AssetID=Item.AssetID;//new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); InventoryReply.InventoryData[0].AssetID=Item.AssetID;
InventoryReply.InventoryData[0].CreatorID=Item.CreatorID;//User_info.AgentID; InventoryReply.InventoryData[0].CreatorID=Item.CreatorID;
InventoryReply.InventoryData[0].BaseMask=2147483647; InventoryReply.InventoryData[0].BaseMask=FULL_MASK_PERMISSIONS;
InventoryReply.InventoryData[0].CreationDate=1000; InventoryReply.InventoryData[0].CreationDate=1000;
InventoryReply.InventoryData[0].Description=enc.GetBytes( Item.Description+"\0"); InventoryReply.InventoryData[0].Description=enc.GetBytes( Item.Description+"\0");
InventoryReply.InventoryData[0].EveryoneMask=2147483647;; InventoryReply.InventoryData[0].EveryoneMask=FULL_MASK_PERMISSIONS;
InventoryReply.InventoryData[0].Flags=1; InventoryReply.InventoryData[0].Flags=1;
InventoryReply.InventoryData[0].FolderID=Item.FolderID;//new LLUUID("4fb2dab6-a987-da66-05ee-96ca82bccbf1"); InventoryReply.InventoryData[0].FolderID=Item.FolderID;
InventoryReply.InventoryData[0].GroupID=new LLUUID("00000000-0000-0000-0000-000000000000"); InventoryReply.InventoryData[0].GroupID=new LLUUID("00000000-0000-0000-0000-000000000000");
InventoryReply.InventoryData[0].GroupMask=2147483647; InventoryReply.InventoryData[0].GroupMask=FULL_MASK_PERMISSIONS;
InventoryReply.InventoryData[0].InvType=Item.InvType; InventoryReply.InventoryData[0].InvType=Item.InvType;
InventoryReply.InventoryData[0].Name=enc.GetBytes(Item.Name+"\0"); InventoryReply.InventoryData[0].Name=enc.GetBytes(Item.Name+"\0");
InventoryReply.InventoryData[0].NextOwnerMask=2147483647; InventoryReply.InventoryData[0].NextOwnerMask=FULL_MASK_PERMISSIONS;
InventoryReply.InventoryData[0].OwnerID=Item.OwnerID;//User_info.AgentID; InventoryReply.InventoryData[0].OwnerID=Item.OwnerID;
InventoryReply.InventoryData[0].OwnerMask=2147483647;; InventoryReply.InventoryData[0].OwnerMask=FULL_MASK_PERMISSIONS;
InventoryReply.InventoryData[0].SalePrice=100; InventoryReply.InventoryData[0].SalePrice=100;
InventoryReply.InventoryData[0].SaleType=0; InventoryReply.InventoryData[0].SaleType=0;
InventoryReply.InventoryData[0].Type=Item.Type;//libsecondlife.AssetSystem.Asset.ASSET_TYPE_WEARABLE_BODY; InventoryReply.InventoryData[0].Type=Item.Type;
InventoryReply.InventoryData[0].CRC=libsecondlife.Helpers.InventoryCRC(1000,0,InventoryReply.InventoryData[0].InvType,InventoryReply.InventoryData[0].Type,InventoryReply.InventoryData[0].AssetID ,InventoryReply.InventoryData[0].GroupID,100,InventoryReply.InventoryData[0].OwnerID,InventoryReply.InventoryData[0].CreatorID,InventoryReply.InventoryData[0].ItemID,InventoryReply.InventoryData[0].FolderID,2147483647,1,2147483647,2147483647,2147483647); InventoryReply.InventoryData[0].CRC=libsecondlife.Helpers.InventoryCRC(1000,0,InventoryReply.InventoryData[0].InvType,InventoryReply.InventoryData[0].Type,InventoryReply.InventoryData[0].AssetID ,InventoryReply.InventoryData[0].GroupID,100,InventoryReply.InventoryData[0].OwnerID,InventoryReply.InventoryData[0].CreatorID,InventoryReply.InventoryData[0].ItemID,InventoryReply.InventoryData[0].FolderID,FULL_MASK_PERMISSIONS,1,FULL_MASK_PERMISSIONS,FULL_MASK_PERMISSIONS,FULL_MASK_PERMISSIONS);
server.SendPacket(InventoryReply,true,User_info); server.SendPacket(InventoryReply,true,User_info);
} }
} }
@ -226,7 +228,7 @@ namespace OpenSim
public LLUUID OwnerID; public LLUUID OwnerID;
public LLUUID ItemID; public LLUUID ItemID;
public LLUUID AssetID; public LLUUID AssetID;
public LLUUID CreatorID=LLUUID.Zero;//new LLUUID("3d924400-038e-6ad9-920b-cfbb9b40585c"); public LLUUID CreatorID=LLUUID.Zero;
public sbyte InvType; public sbyte InvType;
public sbyte Type; public sbyte Type;
public string Name; public string Name;

View File

@ -70,38 +70,43 @@ namespace OpenSim
runLoginProxy.Start(); runLoginProxy.Start();
} }
private void RunLoginProxy() { private void RunLoginProxy()
try { {
for (;;) { try
Socket client = loginServer.Accept(); {
IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint; for (;;)
{
Socket client = loginServer.Accept();
IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint;
NetworkStream networkStream = new NetworkStream(client); NetworkStream networkStream = new NetworkStream(client);
StreamReader networkReader = new StreamReader(networkStream); StreamReader networkReader = new StreamReader(networkStream);
StreamWriter networkWriter = new StreamWriter(networkStream); StreamWriter networkWriter = new StreamWriter(networkStream);
try try
{ {
ProxyLogin(networkReader, networkWriter); ProxyLogin(networkReader, networkWriter);
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.Message); Console.WriteLine(e.Message);
}
networkWriter.Close();
networkReader.Close();
networkStream.Close();
client.Close();
// send any packets queued for injection
} }
}
networkWriter.Close(); catch (Exception e)
networkReader.Close(); {
networkStream.Close(); Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
client.Close();
// send any packets queued for injection
}
} catch (Exception e) {
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
} }
} }

View File

@ -133,130 +133,110 @@ namespace OpenSim
/// <param name="rotation"></param> /// <param name="rotation"></param>
public void UpdatePrimPosition(User_Agent_info User,LLVector3 position,uint LocalID,bool setRotation, LLQuaternion rotation) public void UpdatePrimPosition(User_Agent_info User,LLVector3 position,uint LocalID,bool setRotation, LLQuaternion rotation)
{ {
PrimInfo pri=null; PrimInfo pri=null;
foreach (KeyValuePair<libsecondlife.LLUUID,PrimInfo> kp in this.PrimList) foreach (KeyValuePair<libsecondlife.LLUUID,PrimInfo> kp in this.PrimList)
{ {
if(kp.Value.LocalID==LocalID) if(kp.Value.LocalID==LocalID)
{ {
pri=kp.Value; pri=kp.Value;
} }
} }
if(pri==null) if(pri==null)
{ {
return; return;
} }
uint ID=pri.LocalID; uint ID=pri.LocalID;
libsecondlife.LLVector3 pos2=new LLVector3(position.X,position.Y,position.Z); libsecondlife.LLVector3 pos2=new LLVector3(position.X,position.Y,position.Z);
libsecondlife.LLQuaternion rotation2; libsecondlife.LLQuaternion rotation2;
if(!setRotation) if(!setRotation)
{ {
pri.Position=pos2; pri.Position=pos2;
rotation2=new LLQuaternion(pri.Rotation.X,pri.Rotation.Y,pri.Rotation.Z,pri.Rotation.W); rotation2=new LLQuaternion(pri.Rotation.X,pri.Rotation.Y,pri.Rotation.Z,pri.Rotation.W);
} }
else else
{ {
rotation2=new LLQuaternion(rotation.X,rotation.Y,rotation.Z,rotation.W); rotation2=new LLQuaternion(rotation.X,rotation.Y,rotation.Z,rotation.W);
pos2=pri.Position;
pos2=pri.Position; pri.Rotation=rotation;
pri.Rotation=rotation; }
} rotation2.W+=1;
rotation2.W+=1; rotation2.X+=1;
rotation2.X+=1; rotation2.Y+=1;
rotation2.Y+=1; rotation2.Z+=1;
rotation2.Z+=1;
byte[] bytes=new byte[60];
byte[] bytes=new byte[60];
ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket();
ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket(); im.RegionData.RegionHandle=Globals.Instance.RegionHandle;
im.RegionData.RegionHandle=Globals.Instance.RegionHandle; im.RegionData.TimeDilation=64096;
im.RegionData.TimeDilation=64096; im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; int i=0;
int i=0; ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); im.ObjectData[0]=dat;
im.ObjectData[0]=dat; dat.TextureEntry=PrimTemplate.TextureEntry;
dat.TextureEntry=PrimTemplate.TextureEntry;
//System.Console.WriteLine("new position is :"+position); bytes[i++] = (byte)(ID % 256);
bytes[i++] = (byte)((ID >> 8) % 256);
bytes[i++] = (byte)(ID % 256); bytes[i++] = (byte)((ID >> 16) % 256);
bytes[i++] = (byte)((ID >> 8) % 256); bytes[i++] = (byte)((ID >> 24) % 256);
bytes[i++] = (byte)((ID >> 16) % 256); bytes[i++]=0;
bytes[i++] = (byte)((ID >> 24) % 256); bytes[i++]=0;//1;
bytes[i++]=0;
bytes[i++]=0;//1;
// i+=14; byte[] pb=pos2.GetBytes();
// bytes[i++]=128; pri.Position=pos2;
// bytes[i++]=63; Array.Copy(pb,0,bytes,i,pb.Length);
byte[] pb=pos2.GetBytes(); i+=12;
pri.Position=pos2; ushort ac=32767;
Array.Copy(pb,0,bytes,i,pb.Length);
i+=12;
ushort ac=32767;
//vel //vel
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
//accel //accel
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
//if(setRotation) ushort rw, rx,ry,rz;
//{ rw=(ushort)(32768*rotation2.W);
rx=(ushort)(32768*rotation2.X);
ushort rw, rx,ry,rz; ry=(ushort)(32768*rotation2.Y);
rw=(ushort)(32768*rotation2.W); rz=(ushort)(32768*rotation2.Z);
rx=(ushort)(32768*rotation2.X);
ry=(ushort)(32768*rotation2.Y); //rot
rz=(ushort)(32768*rotation2.Z); bytes[i++] = (byte)(rx % 256);
bytes[i++] = (byte)((rx >> 8) % 256);
//rot bytes[i++] = (byte)(ry % 256);
bytes[i++] = (byte)(rx % 256); bytes[i++] = (byte)((ry >> 8) % 256);
bytes[i++] = (byte)((rx >> 8) % 256); bytes[i++] = (byte)(rz % 256);
bytes[i++] = (byte)(ry % 256); bytes[i++] = (byte)((rz >> 8) % 256);
bytes[i++] = (byte)((ry >> 8) % 256); bytes[i++] = (byte)(rw % 256);
bytes[i++] = (byte)(rz % 256); bytes[i++] = (byte)((rw >> 8) % 256);
bytes[i++] = (byte)((rz >> 8) % 256);
bytes[i++] = (byte)(rw % 256); //rotation vel
bytes[i++] = (byte)((rw >> 8) % 256); bytes[i++] = (byte)(ac % 256);
//} bytes[i++] = (byte)((ac >> 8) % 256);
/*else bytes[i++] = (byte)(ac % 256);
{ bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256); bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); bytes[i++] = (byte)((ac >> 8) % 256);
bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); dat.Data=bytes;
bytes[i++] = (byte)(ac % 256);
bytes[i++] = (byte)((ac >> 8) % 256); foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in Agent_Manager.AgentList)
bytes[i++] = (byte)(ac % 256); {
bytes[i++] = (byte)((ac >> 8) % 256); if(kp.Value.NetInfo.AgentID!=User.AgentID)
}*/ {
//rotation vel server.SendPacket(im,true,kp.Value.NetInfo);
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);
dat.Data=bytes;
//server.SendPacket(im,true,user);
//should send to all users.
foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in Agent_Manager.AgentList)
{
if(kp.Value.NetInfo.AgentID!=User.AgentID)
{
server.SendPacket(im,true,kp.Value.NetInfo);
}
}
} }
/// <summary> /// <summary>
@ -310,49 +290,50 @@ namespace OpenSim
public void ReadPrimDatabase(string name,User_Agent_info user) public void ReadPrimDatabase(string name,User_Agent_info user)
{ {
StreamReader SR; StreamReader SR;
string line; string line;
SR=File.OpenText(name); SR=File.OpenText(name);
string [] comp= new string[10]; string [] comp= new string[10];
string delimStr = " , "; string delimStr = " , ";
char [] delimiter = delimStr.ToCharArray(); char [] delimiter = delimStr.ToCharArray();
line=SR.ReadLine();
while(line!="end")
{
comp=line.Split(delimiter);
if(comp[0]=="ObjPack"){
int num=Convert.ToInt32(comp[2]);
int start=Convert.ToInt32(comp[1]);
ObjectUpdatePacket objupdate=new ObjectUpdatePacket();
objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle;
objupdate.RegionData.TimeDilation=64096;
objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[num];
// int count=0;
string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\data\";
for(int cc=0; cc<num; cc++)
{
string filenam=data_path+@"prim_updates"+start+".dat";
int i=0;
//FileInfo fInfo = new FileInfo("objectupate"+start+".dat");
FileInfo fInfo = new FileInfo(filenam);
long numBytes = fInfo.Length;
//FileStream fStream = new FileStream("objectupate"+start+".dat", FileMode.Open, FileAccess.Read);
FileStream fStream = new FileStream(filenam, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
byte [] data1 = br.ReadBytes((int)numBytes);
br.Close();
fStream.Close();
libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i);
objupdate.ObjectData[cc]=objdata;
start++;
}
server.SendPacket(objupdate,true,user);
line=SR.ReadLine(); line=SR.ReadLine();
} while(line!="end")
} {
SR.Close(); comp=line.Split(delimiter);
if(comp[0]=="ObjPack")
{
int num=Convert.ToInt32(comp[2]);
int start=Convert.ToInt32(comp[1]);
ObjectUpdatePacket objupdate=new ObjectUpdatePacket();
objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle;
objupdate.RegionData.TimeDilation=64096;
objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[num];
// int count=0;
string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\data\";
for(int cc=0; cc<num; cc++)
{
string filenam=data_path+@"prim_updates"+start+".dat";
int i=0;
//FileInfo fInfo = new FileInfo("objectupate"+start+".dat");
FileInfo fInfo = new FileInfo(filenam);
long numBytes = fInfo.Length;
//FileStream fStream = new FileStream("objectupate"+start+".dat", FileMode.Open, FileAccess.Read);
FileStream fStream = new FileStream(filenam, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
byte [] data1 = br.ReadBytes((int)numBytes);
br.Close();
fStream.Close();
libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i);
objupdate.ObjectData[cc]=objdata;
start++;
}
server.SendPacket(objupdate,true,user);
line=SR.ReadLine();
}
}
SR.Close();
} }
} }

178
Server.cs
View File

@ -42,14 +42,14 @@ namespace OpenSim
/// <summary> /// <summary>
/// Description of Server. /// Description of Server.
/// </summary> /// </summary>
public interface ServerCallback public interface ServerCallback
{ {
//should replace with delegates //should replace with delegates
void MainCallback(Packet pack, User_Agent_info User_info); void MainCallback(Packet pack, User_Agent_info User_info);
void NewUserCallback(User_Agent_info User_info); void NewUserCallback(User_Agent_info User_info);
void ErrorCallback(string text); void ErrorCallback(string text);
} }
public class Server public class Server
{ {
/// <summary>A public reference to the client that this Simulator object /// <summary>A public reference to the client that this Simulator object
/// is attached to</summary> /// is attached to</summary>
@ -93,8 +93,6 @@ namespace OpenSim
} }
private ServerCallback CallbackObject; private ServerCallback CallbackObject;
//private NetworkManager Network;
// private Dictionary<PacketType, List<NetworkManager.PacketCallback>> Callbacks;
private uint Sequence = 0; private uint Sequence = 0;
private object SequenceLock = new object(); private object SequenceLock = new object();
private byte[] RecvBuffer = new byte[4096]; private byte[] RecvBuffer = new byte[4096];
@ -102,12 +100,6 @@ namespace OpenSim
private byte[] ZeroOutBuffer = new byte[4096]; private byte[] ZeroOutBuffer = new byte[4096];
private Socket Connection = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); private Socket Connection = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
private AsyncCallback ReceivedData; private AsyncCallback ReceivedData;
// Packets we sent out that need ACKs from the simulator
// private Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
// Sequence numbers of packets we've received from the simulator
// private Queue<uint> Inbox;
// ACKs that are queued up to be sent to the simulator
//private Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
private bool connected = false; private bool connected = false;
private uint circuitCode; private uint circuitCode;
private IPEndPoint ipEndPoint; private IPEndPoint ipEndPoint;
@ -129,62 +121,38 @@ namespace OpenSim
public Server(ServerCallback s_callback) public Server(ServerCallback s_callback)
{ {
this.CallbackObject=s_callback; this.CallbackObject=s_callback; //should be using delegate
// Client = client; AckTimer = new System.Timers.Timer(Settings.NETWORK_TICK_LENGTH);
// Network = client.Network; AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
// Callbacks = callbacks;
// Region = new Region(client);
// circuitCode = circuit;
// Inbox = new Queue<uint>(Settings.INBOX_SIZE);
AckTimer = new System.Timers.Timer(Settings.NETWORK_TICK_LENGTH);
AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
// Initialize the callback for receiving a new packet // Initialize the callback for receiving a new packet
ReceivedData = new AsyncCallback(this.OnReceivedData); ReceivedData = new AsyncCallback(this.OnReceivedData);
// Client.Log("Connecting to " + ip.ToString() + ":" + port, Helpers.LogLevel.Info); // Client.Log("Connecting to " + ip.ToString() + ":" + port, Helpers.LogLevel.Info);
try try
{ {
// Create an endpoint that we will be communicating with (need it in two // Create an endpoint that we will be communicating with (need it in two
// types due to .NET weirdness) // types due to .NET weirdness)
// ipEndPoint = new IPEndPoint(ip, port); // ipEndPoint = new IPEndPoint(ip, port);
ipEndPoint = new IPEndPoint(IPAddress.Any, Globals.Instance.IpPort); ipEndPoint = new IPEndPoint(IPAddress.Any, Globals.Instance.IpPort);
endPoint = (EndPoint)ipEndPoint;
// Associate this simulator's socket with the given ip/port and start listening
endPoint = (EndPoint)ipEndPoint; Connection.Bind(endPoint);
ipeSender = new IPEndPoint(IPAddress.Any, 0);
// Associate this simulator's socket with the given ip/port and start listening
Connection.Bind(endPoint);
ipeSender = new IPEndPoint(IPAddress.Any, 0);
//The epSender identifies the incoming clients //The epSender identifies the incoming clients
epSender = (EndPoint) ipeSender; epSender = (EndPoint) ipeSender;
Connection.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); Connection.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
// Start the ACK timer
// Start the ACK timer AckTimer.Start();
AckTimer.Start(); }
catch (Exception e)
{
// Track the current time for timeout purposes System.Console.WriteLine(e.Message);
//int start = Environment.TickCount; }
/* while (true)
{
if (connected || Environment.TickCount - start > Settings.SIMULATOR_TIMEOUT)
{
return;
}
System.Threading.Thread.Sleep(10);
}*/
}
catch (Exception e)
{
// Client.Log(e.ToString(), Helpers.LogLevel.Error);
System.Console.WriteLine(e.Message);
}
} }
/// <summary> /// <summary>
@ -292,9 +260,8 @@ namespace OpenSim
packet.Type != PacketType.LogoutRequest) packet.Type != PacketType.LogoutRequest)
{ {
packet.Header.AckList = new uint[User_info.PendingAcks.Count]; packet.Header.AckList = new uint[User_info.PendingAcks.Count];
int i = 0; int i = 0;
foreach (uint ack in User_info.PendingAcks.Values) foreach (uint ack in User_info.PendingAcks.Values)
{ {
packet.Header.AckList[i] = ack; packet.Header.AckList[i] = ack;
@ -345,37 +312,6 @@ namespace OpenSim
/// <param name="payload">The packet payload</param> /// <param name="payload">The packet payload</param>
/// <param name="setSequence">Whether the second, third, and fourth bytes /// <param name="setSequence">Whether the second, third, and fourth bytes
/// should be modified to the current stream sequence number</param> /// should be modified to the current stream sequence number</param>
/* public void SendPacket(byte[] payload, bool setSequence)
{
if (connected)
{
try
{
if (setSequence && payload.Length > 3)
{
lock (SequenceLock)
{
payload[1] = (byte)(Sequence >> 16);
payload[2] = (byte)(Sequence >> 8);
payload[3] = (byte)(Sequence % 256);
Sequence++;
}
}
Connection.Send(payload, payload.Length, SocketFlags.None);
}
catch (SocketException e)
{
// Client.Log(e.ToString(), Helpers.LogLevel.Error);
}
}
else
{
// Client.Log("Attempted to send a " + payload.Length + " byte payload when " +
// "we are disconnected", Helpers.LogLevel.Warning);
}
}
*/
/// <summary> /// <summary>
/// Returns Simulator Name as a String /// Returns Simulator Name as a String
/// </summary> /// </summary>
@ -615,56 +551,8 @@ namespace OpenSim
} }
} }
// this.callback_object.error("calling callback");
this.CallbackObject.MainCallback(packet,User_info); this.CallbackObject.MainCallback(packet,User_info);
// this.callback_object.error("finished");
// Fire the registered packet events
#region FireCallbacks
/* if (Callbacks.ContainsKey(packet.Type))
{
List<NetworkManager.PacketCallback> callbackArray = Callbacks[packet.Type];
// Fire any registered callbacks
foreach (NetworkManager.PacketCallback callback in callbackArray)
{
if (callback != null)
{
try
{
callback(packet, this);
}
catch (Exception e)
{
Client.Log("Caught an exception in a packet callback: " + e.ToString(),
Helpers.LogLevel.Error);
}
}
}
}
if (Callbacks.ContainsKey(PacketType.Default))
{
List<NetworkManager.PacketCallback> callbackArray = Callbacks[PacketType.Default];
// Fire any registered callbacks
foreach (NetworkManager.PacketCallback callback in callbackArray)
{
if (callback != null)
{
try
{
callback(packet, this);
}
catch (Exception e)
{
Client.Log("Caught an exception in a packet callback: " + e.ToString(),
Helpers.LogLevel.Error);
}
}
}
}
*/
#endregion FireCallbacks
} }
private void AckTimer_Elapsed(object sender, ElapsedEventArgs ea) private void AckTimer_Elapsed(object sender, ElapsedEventArgs ea)
@ -677,8 +565,8 @@ namespace OpenSim
{ {
User_Agent_info user=(User_Agent_info)this.User_agents[i]; User_Agent_info user=(User_Agent_info)this.User_agents[i];
SendAcks(user); SendAcks(user);
ResendUnacked(user); ResendUnacked(user);
} }
} }
} }
@ -731,7 +619,7 @@ namespace OpenSim
} }
} }
public class User_Agent_info public class User_Agent_info
{ {
public EndPoint endpoint; public EndPoint endpoint;
public LLUUID AgentID; public LLUUID AgentID;