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;
        }
示例#3
0
        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));
            }
        }