Ejemplo n.º 1
0
    protected void lnkAdd_Click(object sender, EventArgs e)
    {
        string PCode;

        try
        {
            div_cashrct.Visible = false;
            ViewState["Flag"]   = "AD";
            Submit.Text         = "Submit";

            lblActivity.Text = "Add App";
            //txtAppNo.Text = SA.GetAppNo(Session["BRCD"].ToString()).ToString();
            txtdate.Text = Session["EntryDate"].ToString();


            PCode = SA.SavProdCode(Session["BRCD"].ToString());
            ViewState["PrCode"] = PCode.ToString();
            SetDefaultAmount();


            divShareApp.Visible = true;
            btnReceipt.Visible  = false;
            Submit.Visible      = true;
        }
        catch (Exception Ex)
        {
            ExceptionLogging.SendErrorToText(Ex);
        }
    }
Ejemplo n.º 2
0
        // Processes object update packets (Avatars and Objects entering drawing distance)
        private Packet ProcessObjectUpdate(Packet packet, IPEndPoint endpoint)
        {
            ObjectUpdatePacket update = (ObjectUpdatePacket)packet;

            for (int b = 0; b < update.ObjectData.Length; b++)
            {
                ObjectUpdatePacket.ObjectDataBlock block = update.ObjectData[b];

                ObjectMovementUpdate objectupdate = new ObjectMovementUpdate();
                NameValue[]          nameValues;
                string firstname = "";
                string lastname  = "";
                PCode  pcode     = (PCode)block.PCode;

                #region NameValue parsing

                string nameValue = Utils.BytesToString(block.NameValue);
                if (nameValue.Length > 0)
                {
                    string[] lines = nameValue.Split('\n');
                    nameValues = new NameValue[lines.Length];

                    for (int i = 0; i < lines.Length; i++)
                    {
                        if (!String.IsNullOrEmpty(lines[i]))
                        {
                            NameValue nv = new NameValue(lines[i]);
                            if (nv.Name == "FirstName")
                            {
                                firstname = nv.Value.ToString();
                            }
                            if (nv.Name == "LastName")
                            {
                                lastname = nv.Value.ToString();
                            }
                            nameValues[i] = nv;
                        }
                    }
                }
                else
                {
                    nameValues = new NameValue[0];
                }

                #endregion NameValue parsing

                #region Decode Object (primitive) parameters
                Primitive.ConstructionData data = new Primitive.ConstructionData();
                data.State            = block.State;
                data.Material         = (Material)block.Material;
                data.PathCurve        = (PathCurve)block.PathCurve;
                data.profileCurve     = block.ProfileCurve;
                data.PathBegin        = Primitive.UnpackBeginCut(block.PathBegin);
                data.PathEnd          = Primitive.UnpackEndCut(block.PathEnd);
                data.PathScaleX       = Primitive.UnpackPathScale(block.PathScaleX);
                data.PathScaleY       = Primitive.UnpackPathScale(block.PathScaleY);
                data.PathShearX       = Primitive.UnpackPathShear((sbyte)block.PathShearX);
                data.PathShearY       = Primitive.UnpackPathShear((sbyte)block.PathShearY);
                data.PathTwist        = Primitive.UnpackPathTwist(block.PathTwist);
                data.PathTwistBegin   = Primitive.UnpackPathTwist(block.PathTwistBegin);
                data.PathRadiusOffset = Primitive.UnpackPathTwist(block.PathRadiusOffset);
                data.PathTaperX       = Primitive.UnpackPathTaper(block.PathTaperX);
                data.PathTaperY       = Primitive.UnpackPathTaper(block.PathTaperY);
                data.PathRevolutions  = Primitive.UnpackPathRevolutions(block.PathRevolutions);
                data.PathSkew         = Primitive.UnpackPathTwist(block.PathSkew);
                data.ProfileBegin     = Primitive.UnpackBeginCut(block.ProfileBegin);
                data.ProfileEnd       = Primitive.UnpackEndCut(block.ProfileEnd);
                data.ProfileHollow    = Primitive.UnpackProfileHollow(block.ProfileHollow);
                data.PCode            = pcode;
                #endregion

                #region Decode Additional packed parameters in ObjectData
                int pos = 0;
                switch (block.ObjectData.Length)
                {
                case 76:
                    // Collision normal for avatar
                    objectupdate.CollisionPlane = new Vector4(block.ObjectData, pos);
                    pos += 16;
                    goto case 60;

                case 60:
                    // Position
                    objectupdate.Position = new Vector3(block.ObjectData, pos);
                    pos += 12;
                    // Velocity
                    objectupdate.Velocity = new Vector3(block.ObjectData, pos);
                    pos += 12;
                    // Acceleration
                    objectupdate.Acceleration = new Vector3(block.ObjectData, pos);
                    pos += 12;
                    // Rotation (theta)
                    objectupdate.Rotation = new Quaternion(block.ObjectData, pos, true);
                    pos += 12;
                    // Angular velocity (omega)
                    objectupdate.AngularVelocity = new Vector3(block.ObjectData, pos);
                    pos += 12;
                    break;

                case 48:
                    // Collision normal for avatar
                    objectupdate.CollisionPlane = new Vector4(block.ObjectData, pos);
                    pos += 16;
                    goto case 32;

                case 32:
                    // The data is an array of unsigned shorts

                    // Position
                    objectupdate.Position = new Vector3(
                        Utils.UInt16ToFloat(block.ObjectData, pos, -0.5f * 256.0f, 1.5f * 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 2, -0.5f * 256.0f, 1.5f * 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 4, -256.0f, 3.0f * 256.0f));
                    pos += 6;
                    // Velocity
                    objectupdate.Velocity = new Vector3(
                        Utils.UInt16ToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 4, -256.0f, 256.0f));
                    pos += 6;
                    // Acceleration
                    objectupdate.Acceleration = new Vector3(
                        Utils.UInt16ToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 4, -256.0f, 256.0f));
                    pos += 6;
                    // Rotation (theta)
                    objectupdate.Rotation = new Quaternion(
                        Utils.UInt16ToFloat(block.ObjectData, pos, -1.0f, 1.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 2, -1.0f, 1.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 4, -1.0f, 1.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 6, -1.0f, 1.0f));
                    pos += 8;
                    // Angular velocity (omega)
                    objectupdate.AngularVelocity = new Vector3(
                        Utils.UInt16ToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f),
                        Utils.UInt16ToFloat(block.ObjectData, pos + 4, -256.0f, 256.0f));
                    pos += 6;
                    break;

                case 16:
                    // The data is an array of single bytes (8-bit numbers)

                    // Position
                    objectupdate.Position = new Vector3(
                        Utils.ByteToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 1, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f));
                    pos += 3;
                    // Velocity
                    objectupdate.Velocity = new Vector3(
                        Utils.ByteToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 1, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f));
                    pos += 3;
                    // Accleration
                    objectupdate.Acceleration = new Vector3(
                        Utils.ByteToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 1, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f));
                    pos += 3;
                    // Rotation
                    objectupdate.Rotation = new Quaternion(
                        Utils.ByteToFloat(block.ObjectData, pos, -1.0f, 1.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 1, -1.0f, 1.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 2, -1.0f, 1.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 3, -1.0f, 1.0f));
                    pos += 4;
                    // Angular Velocity
                    objectupdate.AngularVelocity = new Vector3(
                        Utils.ByteToFloat(block.ObjectData, pos, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 1, -256.0f, 256.0f),
                        Utils.ByteToFloat(block.ObjectData, pos + 2, -256.0f, 256.0f));
                    pos += 3;
                    break;

                default:
                    SayToUser("ERROR: Got an ObjectUpdate block with ObjectUpdate field length of " + block.ObjectData.Length);
                    continue;
                }
                #endregion

                // Determine the object type and create the appropriate class
                switch (pcode)
                {
                    #region Prim and Foliage
                case PCode.Grass:
                case PCode.Tree:
                case PCode.NewTree:
                case PCode.Prim:
                    break;
                    #endregion Prim and Foliage

                    #region Avatar
                case PCode.Avatar:
                    if (block.FullID == this.frame.AgentID)
                    {
                        mylocalid = block.ID;
                        StatusSetLocalID(mylocalid.ToString());
                    }

                    #region Create an Avatar from the decoded data

                    Avatar avatar = new Avatar();
                    if (Avatars.ContainsKey(block.ID))
                    {
                        avatar = Avatars[block.ID];
                    }

                    objectupdate.Avatar = true;
                    // Textures
                    objectupdate.Textures = new Primitive.TextureEntry(block.TextureEntry, 0,
                                                                       block.TextureEntry.Length);

                    uint oldSeatID = avatar.ParentID;

                    avatar.ID              = block.FullID;
                    avatar.LocalID         = block.ID;
                    avatar.CollisionPlane  = objectupdate.CollisionPlane;
                    avatar.Position        = objectupdate.Position;
                    avatar.Velocity        = objectupdate.Velocity;
                    avatar.Acceleration    = objectupdate.Acceleration;
                    avatar.Rotation        = objectupdate.Rotation;
                    avatar.AngularVelocity = objectupdate.AngularVelocity;
                    avatar.NameValues      = nameValues;
                    avatar.PrimData        = data;
                    if (block.Data.Length > 0)
                    {
                        SayToUser("ERROR: Unexpected Data field for an avatar update, length " + block.Data.Length);
                    }
                    avatar.ParentID     = block.ParentID;
                    avatar.RegionHandle = update.RegionData.RegionHandle;

                    // Textures
                    avatar.Textures = objectupdate.Textures;

                    // Save the avatar
                    lock (Avatars) Avatars[block.ID] = avatar;

                    // Fill up the translation dictionaries
                    lock (AvatarIDtoUUID) AvatarIDtoUUID[block.ID] = block.FullID;
                    lock (AvatarUUIDtoID) AvatarUUIDtoID[block.FullID] = block.ID;
                    lock (AvatarUUIDToName) AvatarUUIDToName[block.FullID] = firstname + " " + lastname;
                    lock (AvatarNameToUUID) AvatarNameToUUID[firstname + " " + lastname] = block.FullID;

                    #endregion Create an Avatar from the decoded data

                    break;
                    #endregion Avatar

                case PCode.ParticleSystem:
//                            ConsoleWriteLine("ERROR: Got a particle system update.");
//                            // TODO: Create a callback for particle updates
                    break;

                default:
                    SayToUser("ERROR: Got an ObjectUpdate block with an unrecognized PCode " + pcode.ToString());
                    break;
                }
            }
            return(packet);
        }