/* * Copyright (c) 2006-2014, openmetaverse.org * All rights reserved. * * - Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * - Neither the name of the openmetaverse.org nor the names * of its contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (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 System; using System.Drawing; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Data; using OpenMetaverse; using OpenMetaverse.Packets; namespace GridAccountant { /// /// Summary description for Form1. /// public class frmGridAccountant : System.Windows.Forms.Form { private System.Windows.Forms.GroupBox grpLogin; private System.Windows.Forms.TextBox txtPassword; private System.Windows.Forms.TextBox txtLastName; private System.Windows.Forms.Button cmdConnect; private System.Windows.Forms.TextBox txtFirstName; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label lblName; private System.Windows.Forms.Label lblBalance; private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox txtFind; private System.Windows.Forms.Button cmdFind; private System.Windows.Forms.TextBox txtTransfer; private System.Windows.Forms.Button cmdTransfer; private System.Windows.Forms.Label label7; private System.Windows.Forms.ListView lstFind; private System.Windows.Forms.ColumnHeader colName; private System.Windows.Forms.ColumnHeader colOnline; private System.Windows.Forms.ColumnHeader colUuid; private GridClient Client; public frmGridAccountant() { // // Required for Windows Form Designer support // InitializeComponent(); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { Client.Network.Logout(); if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.grpLogin = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.txtPassword = new System.Windows.Forms.TextBox(); this.txtLastName = new System.Windows.Forms.TextBox(); this.cmdConnect = new System.Windows.Forms.Button(); this.txtFirstName = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.lblName = new System.Windows.Forms.Label(); this.lblBalance = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.txtFind = new System.Windows.Forms.TextBox(); this.cmdFind = new System.Windows.Forms.Button(); this.txtTransfer = new System.Windows.Forms.TextBox(); this.cmdTransfer = new System.Windows.Forms.Button(); this.label7 = new System.Windows.Forms.Label(); this.lstFind = new System.Windows.Forms.ListView(); this.colName = new System.Windows.Forms.ColumnHeader(); this.colOnline = new System.Windows.Forms.ColumnHeader(); this.colUuid = new System.Windows.Forms.ColumnHeader(); this.grpLogin.SuspendLayout(); this.SuspendLayout(); // // grpLogin // this.grpLogin.Controls.Add(this.label3); this.grpLogin.Controls.Add(this.label2); this.grpLogin.Controls.Add(this.label1); this.grpLogin.Controls.Add(this.txtPassword); this.grpLogin.Controls.Add(this.txtLastName); this.grpLogin.Controls.Add(this.cmdConnect); this.grpLogin.Controls.Add(this.txtFirstName); this.grpLogin.Enabled = false; this.grpLogin.Location = new System.Drawing.Point(16, 344); this.grpLogin.Name = "grpLogin"; this.grpLogin.Size = new System.Drawing.Size(560, 80); this.grpLogin.TabIndex = 50; this.grpLogin.TabStop = false; // // label3 // this.label3.Location = new System.Drawing.Point(280, 24); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(120, 16); this.label3.TabIndex = 50; this.label3.Text = "Password"; // // label2 // this.label2.Location = new System.Drawing.Point(152, 24); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 16); this.label2.TabIndex = 50; this.label2.Text = "Last Name"; // // label1 // this.label1.Location = new System.Drawing.Point(16, 24); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 16); this.label1.TabIndex = 50; this.label1.Text = "First Name"; // // txtPassword // this.txtPassword.Location = new System.Drawing.Point(280, 40); this.txtPassword.Name = "txtPassword"; this.txtPassword.PasswordChar = '*'; this.txtPassword.Size = new System.Drawing.Size(120, 20); this.txtPassword.TabIndex = 2; this.txtPassword.Text = ""; // // txtLastName // this.txtLastName.Location = new System.Drawing.Point(152, 40); this.txtLastName.Name = "txtLastName"; this.txtLastName.Size = new System.Drawing.Size(112, 20); this.txtLastName.TabIndex = 1; this.txtLastName.Text = ""; // // cmdConnect // this.cmdConnect.Location = new System.Drawing.Point(424, 40); this.cmdConnect.Name = "cmdConnect"; this.cmdConnect.Size = new System.Drawing.Size(120, 24); this.cmdConnect.TabIndex = 3; this.cmdConnect.Text = "Connect"; this.cmdConnect.Click += new System.EventHandler(this.cmdConnect_Click); // // txtFirstName // this.txtFirstName.Location = new System.Drawing.Point(16, 40); this.txtFirstName.Name = "txtFirstName"; this.txtFirstName.Size = new System.Drawing.Size(120, 20); this.txtFirstName.TabIndex = 0; this.txtFirstName.Text = ""; // // label4 // this.label4.Location = new System.Drawing.Point(16, 8); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(48, 16); this.label4.TabIndex = 50; this.label4.Text = "Name:"; // // lblName // this.lblName.Location = new System.Drawing.Point(64, 8); this.lblName.Name = "lblName"; this.lblName.Size = new System.Drawing.Size(184, 16); this.lblName.TabIndex = 50; // // lblBalance // this.lblBalance.Location = new System.Drawing.Point(512, 8); this.lblBalance.Name = "lblBalance"; this.lblBalance.Size = new System.Drawing.Size(64, 16); this.lblBalance.TabIndex = 50; this.lblBalance.TextAlign = System.Drawing.ContentAlignment.TopRight; // // label6 // this.label6.Location = new System.Drawing.Point(456, 8); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(56, 16); this.label6.TabIndex = 50; this.label6.Text = "Balance:"; // // label5 // this.label5.Location = new System.Drawing.Point(16, 40); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(88, 16); this.label5.TabIndex = 50; this.label5.Text = "People Search"; // // txtFind // this.txtFind.Enabled = false; this.txtFind.Location = new System.Drawing.Point(16, 56); this.txtFind.Name = "txtFind"; this.txtFind.Size = new System.Drawing.Size(184, 20); this.txtFind.TabIndex = 4; this.txtFind.Text = ""; // // cmdFind // this.cmdFind.Enabled = false; this.cmdFind.Location = new System.Drawing.Point(208, 56); this.cmdFind.Name = "cmdFind"; this.cmdFind.Size = new System.Drawing.Size(48, 24); this.cmdFind.TabIndex = 5; this.cmdFind.Text = "Find"; this.cmdFind.Click += new System.EventHandler(this.cmdFind_Click); // // txtTransfer // this.txtTransfer.Enabled = false; this.txtTransfer.Location = new System.Drawing.Point(360, 192); this.txtTransfer.MaxLength = 7; this.txtTransfer.Name = "txtTransfer"; this.txtTransfer.Size = new System.Drawing.Size(104, 20); this.txtTransfer.TabIndex = 7; this.txtTransfer.Text = ""; // // cmdTransfer // this.cmdTransfer.Enabled = false; this.cmdTransfer.Location = new System.Drawing.Point(472, 192); this.cmdTransfer.Name = "cmdTransfer"; this.cmdTransfer.Size = new System.Drawing.Size(104, 24); this.cmdTransfer.TabIndex = 8; this.cmdTransfer.Text = "Transfer Lindens"; this.cmdTransfer.Click += new System.EventHandler(this.cmdTransfer_Click); // // label7 // this.label7.Location = new System.Drawing.Point(360, 176); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(88, 16); this.label7.TabIndex = 17; this.label7.Text = "Amount:"; // // lstFind // this.lstFind.Activation = System.Windows.Forms.ItemActivation.OneClick; this.lstFind.AllowColumnReorder = true; this.lstFind.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.colName, this.colOnline, this.colUuid}); this.lstFind.FullRowSelect = true; this.lstFind.HideSelection = false; this.lstFind.Location = new System.Drawing.Point(16, 88); this.lstFind.Name = "lstFind"; this.lstFind.Size = new System.Drawing.Size(336, 248); this.lstFind.Sorting = System.Windows.Forms.SortOrder.Ascending; this.lstFind.TabIndex = 6; this.lstFind.View = System.Windows.Forms.View.Details; // // colName // this.colName.Text = "Name"; this.colName.Width = 120; // // colOnline // this.colOnline.Text = "Online"; this.colOnline.Width = 50; // // colUuid // this.colUuid.Text = "UUID"; this.colUuid.Width = 150; // // frmGridAccountant // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(592, 437); this.Controls.Add(this.lstFind); this.Controls.Add(this.label7); this.Controls.Add(this.cmdTransfer); this.Controls.Add(this.txtTransfer); this.Controls.Add(this.txtFind); this.Controls.Add(this.cmdFind); this.Controls.Add(this.label5); this.Controls.Add(this.lblBalance); this.Controls.Add(this.label6); this.Controls.Add(this.lblName); this.Controls.Add(this.label4); this.Controls.Add(this.grpLogin); this.Name = "frmGridAccountant"; this.Text = "Grid Accountant"; this.Load += new System.EventHandler(this.frmGridAccountant_Load); this.grpLogin.ResumeLayout(false); this.ResumeLayout(false); } #endregion /// /// The main entry point for the application. /// [STAThread] static void Main() { frmGridAccountant frm = new frmGridAccountant(); frm.ShowDialog(); } private delegate void StringParamInvoker(string value); private delegate void ListViewItemParamInvoker(ListViewItem item); private void UpdateBalance(string value) { lblBalance.Text = value; } private void AddFindItem(ListViewItem item) { lock (lstFind) { lstFind.Items.Add(item); } } protected void BalanceHandler(object sender, PacketReceivedEventArgs e) { Packet packet = e.Packet; string value = ((MoneyBalanceReplyPacket)packet).MoneyData.MoneyBalance.ToString(); this.BeginInvoke(new StringParamInvoker(UpdateBalance), new object[] { value }); } private void DirPeopleHandler(object sender, PacketReceivedEventArgs e) { Packet packet = e.Packet; DirPeopleReplyPacket reply = (DirPeopleReplyPacket)packet; foreach (DirPeopleReplyPacket.QueryRepliesBlock block in reply.QueryReplies) { ListViewItem listItem = new ListViewItem(new string[] { Utils.BytesToString(block.FirstName) + " " + Utils.BytesToString(block.LastName), (block.Online ? "Yes" : "No"), block.AgentID.ToString() }); this.BeginInvoke(new ListViewItemParamInvoker(AddFindItem), new object[] { listItem }); } } private void frmGridAccountant_Load(object sender, System.EventArgs e) { Client = new GridClient(); Client.Settings.MULTIPLE_SIMS = false; Client.Network.LoginProgress += Network_OnLogin; // Install our packet handlers Client.Network.RegisterCallback(PacketType.MoneyBalanceReply, BalanceHandler); Client.Network.RegisterCallback(PacketType.DirPeopleReply, DirPeopleHandler); grpLogin.Enabled = true; } private void Network_OnLogin(object sender, LoginProgressEventArgs e) { if (e.Status == LoginStatus.Success) { Random rand = new Random(); // AgentSetAppearance AgentSetAppearancePacket appearance = new AgentSetAppearancePacket(); appearance.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[251]; // Setup some random appearance values for (int i = 0; i < 251; i++) { appearance.VisualParam[i] = new AgentSetAppearancePacket.VisualParamBlock(); appearance.VisualParam[i].ParamValue = (byte)rand.Next(255); } appearance.AgentData.AgentID = Client.Self.AgentID; appearance.AgentData.SessionID = Client.Self.SessionID; appearance.AgentData.SerialNum = 1; appearance.AgentData.Size = new Vector3(0.45F, 0.6F, 1.831094F); appearance.ObjectData.TextureEntry = Utils.EmptyBytes; Client.Network.SendPacket(appearance); // Request our balance Client.Self.RequestBalance(); BeginInvoke( (MethodInvoker)delegate() { lblName.Text = Client.ToString(); txtFind.Enabled = cmdFind.Enabled = true; txtTransfer.Enabled = cmdTransfer.Enabled = true; }); } else if (e.Status == LoginStatus.Failed) { BeginInvoke( (MethodInvoker)delegate() { MessageBox.Show(this, "Error logging in: " + Client.Network.LoginMessage); cmdConnect.Text = "Connect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = true; txtFind.Enabled = cmdFind.Enabled = false; lblName.Text = lblBalance.Text = String.Empty; txtTransfer.Enabled = cmdTransfer.Enabled = false; }); } } private void cmdConnect_Click(object sender, System.EventArgs e) { if (cmdConnect.Text == "Connect") { cmdConnect.Text = "Disconnect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = false; LoginParams loginParams = Client.Network.DefaultLoginParams(txtFirstName.Text, txtLastName.Text, txtPassword.Text, "GridAccountant", "1.0.0"); Client.Network.BeginLogin(loginParams); } else { Client.Network.Logout(); cmdConnect.Text = "Connect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = true; txtFind.Enabled = cmdFind.Enabled = false; lblName.Text = lblBalance.Text = ""; txtTransfer.Enabled = cmdTransfer.Enabled = false; } } private void cmdFind_Click(object sender, System.EventArgs e) { lstFind.Items.Clear(); DirFindQueryPacket query = new DirFindQueryPacket(); query.AgentData.AgentID = Client.Self.AgentID; query.AgentData.SessionID = Client.Self.SessionID; query.QueryData.QueryFlags = 1; query.QueryData.QueryID = UUID.Random(); query.QueryData.QueryStart = 0; query.QueryData.QueryText = Utils.StringToBytes(txtFind.Text); query.Header.Reliable = true; Client.Network.SendPacket(query); } private void cmdTransfer_Click(object sender, System.EventArgs e) { int amount = 0; try { amount = System.Convert.ToInt32(txtTransfer.Text); } catch (Exception) { MessageBox.Show(txtTransfer.Text + " is not a valid amount"); return; } if (lstFind.SelectedItems.Count != 1) { MessageBox.Show("Find an avatar using the directory search and select " + "their name to transfer money"); return; } Client.Self.GiveAvatarMoney(new UUID(lstFind.SelectedItems[0].SubItems[2].Text), amount, "GridAccountant payment"); } } }