unsafe public override void SetDataFromLinkedMem(LinkedMem data) { if (new string(data.name) != "Guild Wars 2") { this.IsValid = false; return; } base.SetDataFromLinkedMem(data); dynamic identityJson = JObject.Parse(new string(data.identity)); this.CharacterName = identityJson.name; this.ProfessionId = identityJson.profession; this.MapId = identityJson.map_id; this.WorldId = identityJson.world_id; this.TeamColorId = identityJson.team_color_id; this.IsCommander = identityJson.commander; GW2Context gw2Context = (GW2Context)Marshal.PtrToStructure((IntPtr)data.context, typeof(GW2Context)); this.ServerAddress = new IPAddress(new byte[] { gw2Context.serverAddress.sin_addr.s_b1, gw2Context.serverAddress.sin_addr.s_b2, gw2Context.serverAddress.sin_addr.s_b3, gw2Context.serverAddress.sin_addr.s_b4 }); this.MapType = gw2Context.mapType; this.ShardId = gw2Context.shardId; this.Instance = gw2Context.instance; this.BuildId = gw2Context.buildId; this.IsValid = true; }
unsafe public virtual void SetDataFromLinkedMem(LinkedMem data) { this.UIVersion = data.uiVersion; this.UITick = data.uiTick; this.Name = new string(data.name); this.AvatarPosition = new Vector3(data.fAvatarPosition[0], data.fAvatarPosition[1], data.fAvatarPosition[2]); this.AvatarFront = new Vector3(data.fAvatarFront[0], data.fAvatarFront[1], data.fAvatarFront[2]); this.AvatarTop = new Vector3(data.fAvatarTop[0], data.fAvatarTop[1], data.fAvatarTop[2]); this.CameraPosition = new Vector3(data.fCameraPosition[0], data.fCameraPosition[1], data.fCameraPosition[2]); this.CameraFront = new Vector3(data.fCameraFront[0], data.fCameraFront[1], data.fCameraFront[2]); this.CameraTop = new Vector3(data.fCameraTop[0], data.fCameraTop[1], data.fCameraTop[2]); this.Identity = new string(data.identity); this.Context = new byte[data.context_len]; Marshal.Copy((IntPtr)data.context, this.Context, 0, this.Context.Length); this.Description = new string(data.description); this.IsValid = true; }
public virtual void Check() { LinkedMem linkedMem = this.MumbleLinkConnector.ReadMemoryMappedFile(); if (linkedMem.uiTick != this.lastTick) { this.lastTick = linkedMem.uiTick; this.lastTickUpdate = DateTime.Now; this.MumbleLinkFile.SetDataFromLinkedMem(linkedMem); if (!this.IsActive) { this.IsActive = true; unsafe { this.OnMumbleLinkStateChanged(new MumbleLinkStateEventArgs(MumbleLinkState.Connected, new string(linkedMem.name))); } } } else if (this.lastTickUpdate != null && this.IsActive && (DateTime.Now - this.lastTickUpdate.Value).TotalSeconds >= this.TimeoutRate) { this.IsActive = false; this.MumbleLinkFile.SetDataFromLinkedMem(linkedMem); this.OnMumbleLinkStateChanged(new MumbleLinkStateEventArgs(MumbleLinkState.Disconnected, null)); } }