コード例 #1
0
        //dummy method to get random watchers
        private Watcher[] randomizeWatchers()
        {
            Random r     = new Random();
            int    noPax = r.Next(1, 11);

            Watcher[] lst = new Watcher[noPax];

            Watcher w;

            for (int i = 0; i < noPax; i++)
            {
                w = new Watcher();

                w.age = (uint)r.Next(1, 101);
                if (w.age <= 12)
                {
                    w.ageGroup = AgeBracket.Child;
                }
                else if (w.age <= 21)
                {
                    w.ageGroup = AgeBracket.YoungAdult;
                }
                else if (w.age <= 50)
                {
                    w.ageGroup = AgeBracket.Adult;
                }
                else
                {
                    w.ageGroup = AgeBracket.Senior;
                }

                w.gender = r.Next(0, 2) == 0 ? Gender.Male : Gender.Female;

                int m = r.Next(0, 6);
                switch (m)
                {
                case 1:
                    w.mood = Mood.VeryUnhappy;
                    break;

                case 2:
                    w.mood = Mood.Unhappy;
                    break;

                case 3:
                    w.mood = Mood.Neutral;
                    break;

                case 4:
                    w.mood = Mood.Happy;
                    break;

                case 5:
                    w.mood = Mood.VeryHappy;
                    break;

                default:
                    w.mood = Mood.Undetermined;
                    break;
                }

                lst[i] = w;
            }

            return(lst);
        }
コード例 #2
0
        //FIELD             SIZE(byte)
        //X_Position        2
        //Y_Position        2
        //Width             2
        //Height            2
        //Est Dist          2
        //WatcherID         4
        //Status            4
        //Gender            1
        //Age Bracket       1
        //Age value         1
        //Extra features    2
        private void processMotionMsg()
        {
            byte[] readByte  = new byte[1];
            byte[] readShort = new byte[2];
            byte[] readInt   = new byte[4];

            //watcher info
            uint       status, watcherID, age;
            AgeBracket ageBracket;
            Gender     gender;
            Watcher    watcher;
            ushort     m;

            vidiSocket.Receive(readShort); //x position not needed
            vidiSocket.Receive(readShort); //y position not needed
            vidiSocket.Receive(readShort); //width not needed
            vidiSocket.Receive(readShort); //height not needed
            vidiSocket.Receive(readShort); //est dist not needed

            vidiSocket.Receive(readInt);
            watcherID = BitConverter.ToUInt32(readInt, 0);

            vidiSocket.Receive(readInt);
            status = BitConverter.ToUInt32(readInt, 0);

            vidiSocket.Receive(readByte);
            if (readByte[0] == 0x01)
            {
                gender = Gender.Male;
            }
            else if (readByte[0] == 0x02)
            {
                gender = Gender.Female;
            }
            else
            {
                gender = Gender.Unknown;
            }

            vidiSocket.Receive(readByte);
            if (readByte[0] == 0x01)
            {
                ageBracket = AgeBracket.Child;
            }
            else if (readByte[0] == 0x02)
            {
                ageBracket = AgeBracket.YoungAdult;
            }
            else if (readByte[0] == 0x03)
            {
                ageBracket = AgeBracket.Adult;
            }
            else if (readByte[0] == 0x04)
            {
                ageBracket = AgeBracket.Senior;
            }
            else
            {
                ageBracket = AgeBracket.Unknown;
            }

            vidiSocket.Receive(readByte);
            age = readByte[0];

            //extra features
            vidiSocket.Receive(readShort);
            m = BitConverter.ToUInt16(readShort, 0);
            Mood mood = Mood.Undetermined;

            //shift the bits to extract the mood portion
            //if do not cast to short, c# by default uses int
            switch (((ushort)(m << 5)) >> 13)
            {
            case 1:
                mood = Mood.VeryUnhappy;
                break;

            case 2:
                mood = Mood.Unhappy;
                break;

            case 3:
                mood = Mood.Neutral;
                break;

            case 4:
                mood = Mood.Happy;
                break;

            case 5:
                mood = Mood.VeryHappy;
                break;
            }

            //Console.WriteLine("Watcher " + watcherID + " status: " + status);

            if ((status & DEAD_FLAG) == DEAD_FLAG)
            {
                Console.WriteLine("Watcher " + watcherID + " exited..");

                //watcher exited, remove from list
                _watchers.TryRemove(watcherID, out watcher);
            }
            else
            {
                //Console.WriteLine("Watcher " + watcherID + " validated..");

                watcher = new Watcher()
                {
                    age = age, ageGroup = ageBracket, gender = gender, mood = mood
                };

                _watchers.AddOrUpdate(watcherID, watcher, (key, existWatcher) => {
                    //watcher exist, update values
                    existWatcher.age      = watcher.age;
                    existWatcher.ageGroup = watcher.ageGroup;
                    existWatcher.gender   = watcher.gender;
                    existWatcher.mood     = watcher.mood;
                    return(existWatcher);
                });
            }
        }