Пример #1
0
        public void addApplication(MonaApplication app)
        {
            SpeechRecognitionEngine appReco = new SpeechRecognitionEngine();

            lock (runningApplications)
            {
                runningApplications[app.getIndex()] = app;

                lock (commands)
                {
                    commands[app.getIndex()] = new Dictionary <string, int>();

                    lock (engines)
                    {
                        lock (grammars)
                        {
                            grammars[app.getIndex()] = new Dictionary <string, Grammar>();
                        }

                        appReco.SetInputToNull();
                        appReco.SpeechRecognized += recognizedWord;
                        appReco.MaxAlternates     = 1;


                        engines[app.getIndex()] = appReco;
                    }
                }

                lock (numberLock)
                {
                    applicationsNb++;
                }
            }
        }
Пример #2
0
        public void switchCurrentApplication(int index)
        {
            MonaApplication app = runningApplications[index];

            if (currentApplication != null)
            {
                //TODO: retirer les autres parametres de l'ancienne application courante
                stopRecognition(currentApplication.getIndex());
            }

            currentApplication = app;
            startRecognition(app.getIndex());
        }
Пример #3
0
        public void removeApplication(MonaApplication app)
        {
            lock (runningApplications)
            {
                runningApplications[app.getIndex()] = null;
                commands[app.getIndex()]            = null;

                //TODO: verifier s'il faut retirer toutes les grammaires avant
                stopRecognition(app.getIndex());
                engines[app.getIndex()] = null;

                lock (grammars)
                {
                    grammars[app.getIndex()] = null;
                }

                lock (freeIndices)
                {
                    freeIndices.Enqueue(app.getIndex());
                }

                lock (numberLock)
                {
                    applicationsNb--;
                }

                if (currentApplication == app)
                {
                    lock (numberLock)
                    {
                        if (applicationsNb == 0)
                        {
                            currentApplication = null;
                        }
                        else
                        {
                            for (int i = 0; i < runningApplications.Length; i++)
                            {
                                if (runningApplications[i] != null)
                                {
                                    switchCurrentApplication(i);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
        public void removeApplication(MonaApplication app)
        {
            lock (runningApplications)
            {
                runningApplications[app.getIndex()] = null;
                commands[app.getIndex()] = null;

                //TODO: verifier s'il faut retirer toutes les grammaires avant
                stopRecognition(app.getIndex());
                engines[app.getIndex()] = null;

                lock (grammars)
                {
                    grammars[app.getIndex()] = null;
                }

                lock (freeIndices)
                {
                    freeIndices.Enqueue(app.getIndex());
                }

                lock (numberLock)
                {
                    applicationsNb--;
                }

                if (currentApplication == app)
                {
                    lock (numberLock)
                    {
                        if (applicationsNb == 0)
                        {
                            currentApplication = null;
                        }
                        else
                        {
                            for (int i = 0; i < runningApplications.Length; i++)
                            {
                                if (runningApplications[i] != null)
                                {
                                    switchCurrentApplication(i);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #5
0
        public void addApplication(MonaApplication app)
        {
            SpeechRecognitionEngine appReco = new SpeechRecognitionEngine();

            lock (runningApplications)
            {
                runningApplications[app.getIndex()] = app;

                lock (commands)
                {
                    commands[app.getIndex()] = new Dictionary<string, int>();

                    lock (engines)
                    {
                        lock (grammars)
                        {
                            grammars[app.getIndex()] = new Dictionary<string, Grammar>();
                        }

                        appReco.SetInputToNull();
                        appReco.SpeechRecognized += recognizedWord;
                        appReco.MaxAlternates = 1;


                        engines[app.getIndex()] = appReco;
                    }
                }

                lock (numberLock)
                {
                    applicationsNb++;
                }
            }
        }
Пример #6
0
        public void switchCurrentApplication(int index)
        {
            MonaApplication app = runningApplications[index];

            if (currentApplication != null)
            {
                //TODO: retirer les autres parametres de l'ancienne application courante
                stopRecognition(currentApplication.getIndex());
            }

            currentApplication = app;
            startRecognition(app.getIndex());
        }
Пример #7
0
        private void waitForApplications()
        {
            try
            {
                TcpClient appSocket;
                MonaApplication app;
                int appIndex = -1;
                NetworkStream stream;

                server.Start();

                while (connected)
                {
                    appSocket = server.AcceptTcpClient();

                    appIndex = getAvailableIndex();
                    stream = appSocket.GetStream();

                    try
                    {
                        if (appIndex >= 0)
                        {
                            app = new MonaApplication(appIndex, this, appSocket);

                            addApplication(app);
                            stream.WriteByte((byte)'Y');
                            stream.Flush();

                            // Lecture des alias deja presents
                            //TOCHECK: on suppose qu'on peut avoir un maximum de 255 alias
                            //TODO: deplacer les lignes de code dans un thread
                            int aliasNb = stream.ReadByte();
                            string cmd;
                            byte[] data;
                            int dataLength;

                            for (int i = 0; i < aliasNb; i++)
                            {
                                dataLength = stream.ReadByte();
                                data = new byte[dataLength];
                                stream.Read(data, 0, dataLength);
                                cmd = Encoding.UTF8.GetString(data);

                                addCommand(cmd, appIndex);
                            }

                            switchCurrentApplication(appIndex);

                            new Thread(new ThreadStart(app.run)).Start();
                        }
                        else
                        {
                            // Le serveur a atteint le nombre max d'applications a gerer
                            // TODO
                            stream.WriteByte((byte)'N');
                            stream.Flush();
                            appSocket.Close();
                        }
                    }
                    catch (Exception e)
                    {
                        continue;
                    }
                }
            }
            catch (Exception e)
            {

            }
        }
Пример #8
0
        private void waitForApplications()
        {
            try
            {
                TcpClient       appSocket;
                MonaApplication app;
                int             appIndex = -1;
                NetworkStream   stream;

                server.Start();

                while (connected)
                {
                    appSocket = server.AcceptTcpClient();

                    appIndex = getAvailableIndex();
                    stream   = appSocket.GetStream();

                    try
                    {
                        if (appIndex >= 0)
                        {
                            app = new MonaApplication(appIndex, this, appSocket);

                            addApplication(app);
                            stream.WriteByte((byte)'Y');
                            stream.Flush();

                            // Lecture des alias deja presents
                            //TOCHECK: on suppose qu'on peut avoir un maximum de 255 alias
                            //TODO: deplacer les lignes de code dans un thread
                            int    aliasNb = stream.ReadByte();
                            string cmd;
                            byte[] data;
                            int    dataLength;

                            for (int i = 0; i < aliasNb; i++)
                            {
                                dataLength = stream.ReadByte();
                                data       = new byte[dataLength];
                                stream.Read(data, 0, dataLength);
                                cmd = Encoding.UTF8.GetString(data);

                                addCommand(cmd, appIndex);
                            }

                            switchCurrentApplication(appIndex);

                            new Thread(new ThreadStart(app.run)).Start();
                        }
                        else
                        {
                            // Le serveur a atteint le nombre max d'applications a gerer
                            // TODO
                            stream.WriteByte((byte)'N');
                            stream.Flush();
                            appSocket.Close();
                        }
                    }
                    catch (Exception e)
                    {
                        continue;
                    }
                }
            }
            catch (Exception e)
            {
            }
        }