public bool Connect(string userName, string freedesc, Guid serverGuid, DateTime time) { lock (m_lock) { IDuplexServiceCallback callback = OperationContext.Current.GetCallbackChannel <IDuplexServiceCallback>(); if (IsClientConnected(userName, serverGuid) == false) { clients.Add(new Tuple <string, Guid>(userName, serverGuid), callback); Console.WriteLine("Number of connected clients: " + clients.Count); var t = new Thread(() => { callback.UserJoin(userName, serverGuid, true); }); t.Start(); } else { clients[new Tuple <string, Guid>(userName, serverGuid)] = callback; Console.WriteLine("Number of connected clients: " + clients.Count); var t = new Thread(() => { callback.UserJoin(userName, serverGuid, false); }); t.Start(); return(true); } return(true); } }
public void Register(string baseFieldGuid) { Callback = OperationContext.Current.GetCallbackChannel <IDuplexServiceCallback>(); if (listCallback.ContainsKey(baseFieldGuid) == false) { listCallback.Add(baseFieldGuid, Callback); } else { listCallback[baseFieldGuid] = Callback; } }
public string StartWatch(string PathToWatch, string Filter, bool IncludeSubdirectories) { try { Callback = OperationContext.Current.GetCallbackChannel <IDuplexServiceCallback>(); listCallback.Add(Callback); m_fileServerClient.StartWatch(PathToWatch, Filter, IncludeSubdirectories); ServiceLogger.WriteLine(LOGGER_NAMES.GOJI_WCF_STREAMING_CLIENT, "Start watched " + PathToWatch); return("ok"); } catch (Exception err) { ServiceLogger.WriteLine(LOGGER_NAMES.GOJI_WCF_STREAMING_CLIENT, err.Message); return(err.Message); } }
public bool Broadcast(string fromUserName, Guid fromServerGuid, string message) { lock (m_lock) { if (IsClientConnected(fromUserName, fromServerGuid) == false) { return(false); } bool broadcast; foreach (KeyValuePair <Tuple <string, Guid>, IDuplexServiceCallback> client in clients) { //Client c = client.Key; try { IDuplexServiceCallback callback = client.Value; if (client.Key.Item1 == fromUserName && client.Key.Item2 == fromServerGuid) { broadcast = false; } else { broadcast = true; } callback.ReceiveBroadcast(client.Key.Item1, client.Key.Item2, fromUserName, fromServerGuid, message, broadcast, DateTime.Now); } catch (Exception err) { _Disconnect(client.Key.Item1, client.Key.Item2, true); Console.WriteLine(err.Message); return(false); } } return(true); } }
public bool SendMessage(string fromUserName, Guid fromServerGuid, string toUserName, Guid toServerGuid, string message) { lock (m_lock) { try { IDuplexServiceCallback p = GetClient(toUserName, toServerGuid); if (p != null) { IDuplexServiceCallback p1 = GetClient(fromUserName, fromServerGuid); p.NotifyMessage(fromUserName, fromServerGuid, toUserName, toServerGuid, message, DateTime.Now); return(true); } else { IDuplexServiceCallback p1 = GetClient(fromUserName, fromServerGuid); if (p1 != null) { p1.NotifyMessageSent(DateTime.Now, false); return(true); } return(false); } } catch (Exception err) { _Disconnect(fromUserName, fromServerGuid, true); Console.WriteLine(err.Message); return(false); } } }