Exemple #1
0
        public string[] Join(string name)
        {
            bool userAdded = false;

            myEventHandler = new ChatEventHandler(MyEventHandler); //将MyEventHandler方法作为参数传递给委托
            lock (syncObj)                                         //线程的同步性,同步访问多个线程的任何变量,利用lock(独占锁),确保数据访问的唯一性。
            {
                if (!chatters.ContainsKey(name) && name != "" && name != null)
                {
                    this.name = name;
                    chatters.Add(name, MyEventHandler);
                    userAdded = true;
                }
            }
            if (userAdded)
            {
                callback = OperationContext.Current.GetCallbackChannel <IMyMessageCallback>(); //获取当前操作客户端实例的通道给IChatCallback接口的实例callback,此通道是一个定义为IChatCallback类型的泛类型,通道的类型是事先服务契约协定好的双工机制。
                ChatEventArgs e = new ChatEventArgs();                                         //实例化事件消息类ChatEventArgs
                e.msgType = MessageType.UserEnter;
                e.name    = name;
                BroadcastMessage(e);
                ChatEvent += myEventHandler;
                string[] list = new string[chatters.Count]; //以下代码返回当前进入聊天室成员的称列表
                lock (syncObj)
                {
                    chatters.Keys.CopyTo(list, 0);//将字典中记录的用户信息复制到数组中返回。
                }
                return(list);
            }
            else
            {
                return(null);
            }
        }
Exemple #2
0
        private void ThreadCallback(object callback)
        {
            IMyMessageCallback messageCallback = callback as IMyMessageCallback;

            for (int i = 0; i < 10; i++)
            {
                messageCallback.OnCallback("message " + i.ToString());
                Thread.Sleep(1000);
            }
        }
        private async void TaskCallback(object callback)
        {
            IMyMessageCallback messageCallback = callback as IMyMessageCallback;

            for (int i = 0; i < 10; i++)
            {
                messageCallback.OnCallback($"message {i}");
                await Task.Delay(1000);
            }
        }
Exemple #4
0
        public void MessageToServer(string message)
        {
            Console.WriteLine($"message from the client: {message}");
            IMyMessageCallback callback =
                OperationContext.Current.
                GetCallbackChannel <IMyMessageCallback>();

            callback.OnCallback("message from the server");

            Task.Factory.StartNew(new Action <object>(TaskCallback), callback, TaskCreationOptions.LongRunning);
        }
Exemple #5
0
        public void MessageToServer(string message)
        {
            Console.WriteLine("message from the client: {0}", message);
            IMyMessageCallback callback =
                OperationContext.Current.
                GetCallbackChannel <IMyMessageCallback>();

            callback.OnCallback("message from the server");

            new Thread(ThreadCallback).Start(callback);
        }
        public void MessageToServer(string message)
        {
            WriteLine($"message from the client: {message}");
            IMyMessageCallback callback =
                OperationContext.Current.
                GetCallbackChannel <IMyMessageCallback>();

            callback.OnCallback("message from the server");

            Task.Run(() => TaskCallback(callback));
        }
        public void MessageToServer(string message)
        {
            Console.WriteLine("message from the client: {0}", message);
            IMyMessageCallback callback =
                OperationContext.Current.
                GetCallbackChannel <IMyMessageCallback>();

            callback.OnCallback("message from the server");

            Task.Factory.StartNew(new Action <object>(TaskCallback), callback);
            // new Thread(ThreadCallback).Start(callback);
        }