using System; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using System.Windows.Media; using System.Timers; using System.Collections.Generic; using Xenki.Framework; namespace Xenki { /// /// Interaction logic for Page1.xaml /// public partial class Mainform : Page { DefaultNetwork.NetworkControl network; Timer messagetimer = new Timer(1000); DefaultAgent.MessageChatManage messageManager; public Mainform() { InitializeComponent(); recentTime = DateTime.Now; CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering); App.Current.Exit += Current_Exit; Startup(); } void Current_Exit(object sender, ExitEventArgs e) { network.Stop(); } private void Startup() { try { debug("Creating renderer"); DefaultRenderer.DefaultRenderer xx = new DefaultRenderer.DefaultRenderer(m_viewport); debug("Creating mesher"); xx.Mesher = new OpenMetaverse.Rendering.Meshmerizer(); debug("Creating network"); network = new DefaultNetwork.NetworkControl(xx); network.OnConnected += new Xenki.DefaultNetwork.NetworkControl.Connected2Server(network_OnConnected); network.OnLog += network_OnLog; network.OnMessageChat += network_OnMessageChat; messagetimer.Enabled = true; messagetimer.Elapsed += new ElapsedEventHandler(messagetimer_Elapsed); } catch (Exception e) { debug("Graphics Error: " + e); } } void network_OnConnected(OpenMetaverse.Simulator simulator) { messageDialog.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { mainMenuGrid.Visibility = Visibility.Visible; })); } void network_OnMessageChat(string msg) { messagetimer.Start(); messageDialog.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { messageDialog.Visibility = Visibility.Visible; if (messageDialog.Items.Count > 10) messageDialog.Items.RemoveAt(0); ListBoxItem item = new ListBoxItem(); item.Tag = DateTime.Now; item.Content = msg; messageDialog.Items.Add(item); //messageDialog.ScrollIntoView(msg); } ) ); } void messagetimer_Elapsed(object sender, ElapsedEventArgs e) { messageDialog.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { if (messageDialog.Items.Count <= 0) { messageDialog.Visibility = Visibility.Hidden; messagetimer.Stop(); return; } List delete = new List(); foreach (ListBoxItem item in messageDialog.Items) { DateTime came =(DateTime) item.Tag; TimeSpan span = e.SignalTime.Subtract(came); if (span.Seconds > References.EnvironmentSettings.MessageDisapearTimespan) { delete.Add(item); } } delete.ForEach(delegate(ListBoxItem im) { messageDialog.Items.Remove(im); }); })); } void network_OnLog(string msg) { debug(msg); } private void debug(string log) { logBox.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { //ListBoxItem lbi = new ListBoxItem(); //lbi.Content = log; if (logBox.Items.Count > 20) logBox.Items.RemoveAt(0); logBox.Items.Add(log); //logBox.ScrollIntoView(lbi); } ) ); /* frameRate.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { } ) ); */ } private void loginButton_Click(object sender, RoutedEventArgs e) { string user = loginUser.Text; string last = loginLast.Text; string pass = loginPass.Password; try { debug("Starting network"); network.Start(user, last, pass); } catch (Exception ex) { debug("Network Error: " + ex); } loginGrid.Visibility = System.Windows.Visibility.Collapsed; } private static int frameCounter = 0; private static DateTime recentTime; void CompositionTarget_Rendering(object sender, EventArgs e) { frameCounter++; if ((DateTime.Now - recentTime) > TimeSpan.FromSeconds(1)) { frameRate.Dispatcher.Invoke( DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker (delegate { frameRate.Content = "FPS: " + frameCounter; frameCounter = 0; recentTime = DateTime.Now; } ) ); } } private void btnmessage_Click(object sender, RoutedEventArgs e) { if (txtMessage.Text.Trim().Length > 0) { network.SendChatMessage(txtMessage.Text, 0, OpenMetaverse.ChatType.Normal); txtMessage.Text = ""; } } private void txtMessage_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (e.Key == System.Windows.Input.Key.Enter) { if (txtMessage.Text.Trim().Length > 0) { network.SendChatMessage(txtMessage.Text, 0, OpenMetaverse.ChatType.Normal); txtMessage.Text = ""; e.Handled = true; } } } } }