21 #include "JackWinNamedPipeClientChannel.h"
22 #include "JackRequest.h"
23 #include "JackClient.h"
24 #include "JackGlobals.h"
25 #include "JackError.h"
30 JackWinNamedPipeClientChannel::JackWinNamedPipeClientChannel()
31 :JackGenericClientChannel(),fThread(this)
33 fRequest =
new JackWinNamedPipeClient();
36 JackWinNamedPipeClientChannel::~JackWinNamedPipeClientChannel()
41 int JackWinNamedPipeClientChannel::Open(
const char* server_name,
const char* name,
int uuid,
char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status)
44 jack_log(
"JackWinNamedPipeClientChannel::Open name = %s", name);
54 if (fRequest->Connect(jack_server_dir, server_name, 0) < 0) {
60 ClientCheck(name, uuid, name_res, JACK_PROTOCOL_VERSION, (
int)options, (
int*)status, &result,
true);
62 int status1 = *status;
63 if (status1 & JackVersionError) {
64 jack_error(
"JACK protocol mismatch %d", JACK_PROTOCOL_VERSION);
66 jack_error(
"Client name = %s conflits with another running client", name);
70 if (fNotificationListenPipe.Bind(jack_client_dir, name_res, 0) < 0) {
80 fNotificationListenPipe.Close();
84 void JackWinNamedPipeClientChannel::Close()
87 fNotificationListenPipe.Close();
92 int JackWinNamedPipeClientChannel::Start()
94 jack_log(
"JackWinNamedPipeClientChannel::Start");
98 if (fThread.StartSync() != 0) {
99 jack_error(
"Cannot start Jack client listener");
106 void JackWinNamedPipeClientChannel::Stop()
108 jack_log(
"JackWinNamedPipeClientChannel::Stop");
114 jack_log(
"JackWinNamedPipeClientChannel::Init");
117 if (!jack_tls_set(JackGlobals::fNotificationThread,
this)) {
118 jack_error(
"Failed to set thread notification key");
121 if (!fNotificationListenPipe.Accept()) {
122 jack_error(
"JackWinNamedPipeClientChannel: cannot establish notification pipe");
129 bool JackWinNamedPipeClientChannel::Execute()
134 if (event.Read(&fNotificationListenPipe) < 0) {
135 jack_error(
"JackWinNamedPipeClientChannel read fail");
139 res.fResult = fClient->ClientNotify(event.fRefNum, event.fName, event.fNotify, event.fSync, event.fMessage, event.fValue1, event.fValue2);
142 if (res.Write(&fNotificationListenPipe) < 0) {
143 jack_error(
"JackWinNamedPipeClientChannel write fail");
151 fNotificationListenPipe.Close();
SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)