Jack2 1.9.6
|
00001 /* 00002 Copyright (C) 2004-2006 Grame 00003 00004 This program is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or 00007 (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 00018 */ 00019 00020 #include "JackWinNamedPipeServerNotifyChannel.h" 00021 #include "JackError.h" 00022 #include "JackRequest.h" 00023 #include "JackConstants.h" 00024 #include "JackNotification.h" 00025 00026 namespace Jack 00027 { 00028 00029 int JackWinNamedPipeServerNotifyChannel::Open(const char* server_name) 00030 { 00031 if (fRequestPipe.Connect(jack_server_dir, server_name, 0) < 0) { 00032 jack_error("Cannot connect to server pipe"); 00033 return -1; 00034 } else { 00035 return 0; 00036 } 00037 } 00038 00039 void JackWinNamedPipeServerNotifyChannel::Close() 00040 { 00041 fRequestPipe.Close(); 00042 } 00043 00044 /* 00045 The requirement is that the Notification from RT thread can be delivered... not sure using a pipe is adequate here... 00046 Can the write operation block? 00047 A non blocking write operation shoud be used : check if write can succeed, and ignore the notification otherwise 00048 (since its mainly used for XRun, ignoring a notification is OK, successive XRun will come...) 00049 */ 00050 void JackWinNamedPipeServerNotifyChannel::Notify(int refnum, int notify, int value) 00051 { 00052 JackClientNotificationRequest req(refnum, notify, value); 00053 if (req.Write(&fRequestPipe) < 0) { 00054 jack_error("Could not write request ref = %d notify = %d", refnum, notify); 00055 } 00056 } 00057 00058 void JackWinNamedPipeServerNotifyChannel::NotifyQuit() 00059 { 00060 JackClientNotificationRequest req(-1, kQUIT, 0); 00061 if (req.Write(&fRequestPipe) < 0) { 00062 jack_error("Could not write request ref = %d notify = %d", -1, kQUIT); 00063 } 00064 } 00065 00066 } // end of namespace 00067 00068