//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); }
//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); }); } }