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++; } } }
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()); }
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; } } } } } } }
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++; } } }
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) { } }