示例#1
0
 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);
     }
 }
示例#2
0
 public void Register(string baseFieldGuid)
 {
     Callback = OperationContext.Current.GetCallbackChannel <IDuplexServiceCallback>();
     if (listCallback.ContainsKey(baseFieldGuid) == false)
     {
         listCallback.Add(baseFieldGuid, Callback);
     }
     else
     {
         listCallback[baseFieldGuid] = Callback;
     }
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
 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);
         }
     }
 }