private void ReceivedClientSpatial(Message message) { if (GetEntitySpatialCompleted != null) { var args = new ClientSpatialEventArgs(); // Read the message client.Reader.ReadNewMessage(message); client.Reader.ReadByte(); // Find out how many clients that are included in the message byte clients = client.Reader.ReadByte(); // Initialize and retrieve all client spatial data args.Entity = new EntitySpatial[clients]; for (byte i = 0; i < clients; i++) { var data = new EntitySpatial(); data.Id = client.Reader.ReadUInt16(); data.TimeStamp = client.Reader.ReadTimeStamp(); data.Position = messageHelper.ReadVector3(client.Reader); data.Velocity = messageHelper.ReadVector3(client.Reader); data.Angle = messageHelper.ReadVector3(client.Reader); args.Entity[i] = data; } GetEntitySpatialCompleted(this, args); } }
// Get data from server private void gameClient_GetClientSpatialCompleted(object sender, ClientSpatialEventArgs e) { if (spatialUpdateCounter++ < 100) { return; } for (int i = 0; i < e.ClientData.Length; i++) { var clientData = e.ClientData[i]; var client = sender as GameClient; for (int j = 0; j < client.ServerEntities.Count; j++) { if (client.ServerEntities[j].Id == clientData.ClientId) { ListViewItem lvi = new ListViewItem(); lvi.Text = DateTime.Now.ToString(); ListViewItem.ListViewSubItem lviSub1 = new ListViewItem.ListViewSubItem(); lviSub1.Text = String.Format("{0}, {1}, {2}", clientData.Position.ToString(), clientData.Velocity.ToString(), clientData.Angle.ToString()); lvi.SubItems.Add(lviSub1); if (listView1.InvokeRequired) { listView1.BeginInvoke(new MethodInvoker( () => listView1.Items.Add(lvi))); } else { listView1.Items.Add(lvi); } break; } } } spatialUpdateCounter = 0; }