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 00025 namespace Jack 00026 { 00027 00028 int JackWinNamedPipeServerNotifyChannel::Open(const char* server_name) 00029 { 00030 if (fRequestPipe.Connect(jack_server_dir, server_name, 0) < 0) { 00031 jack_error("Cannot connect to server pipe"); 00032 return -1; 00033 } else { 00034 return 0; 00035 } 00036 } 00037 00038 void JackWinNamedPipeServerNotifyChannel::Close() 00039 { 00040 fRequestPipe.Close(); 00041 } 00042 00043 /* 00044 The requirement is that the Notification from RT thread can be delivered... not sure using a pipe is adequate here... 00045 Can the write operation block? 00046 A non blocking write operation shoud be used : check if write can succeed, and ignore the notification otherwise 00047 (since its mainly used for XRun, ignoring a notification is OK, successive XRun will come...) 00048 */ 00049 void JackWinNamedPipeServerNotifyChannel::Notify(int refnum, int notify, int value) 00050 { 00051 JackClientNotificationRequest req(refnum, notify, value); 00052 if (req.Write(&fRequestPipe) < 0) { 00053 jack_error("Could not write request ref = %d notify = %d", refnum, notify); 00054 } 00055 } 00056 00057 } // end of namespace 00058 00059