Exemplo n.º 1
0
        // 处理接收的服务器收据

        private void ReceiveData()
        {
            string receiveString = null;

            while (!isExit)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        MessageBox.Show("与服务器失去联系");
                    }
                    break;
                }
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "login":       //格式: login,用户名
                    AddOnline(splitString[1]);
                    break;

                case "logout":      //格式: logout,用户名
                    if (!receiveString.Contains("_"))
                    {
                        RemoveUserName(splitString[1]);
                    }
                    break;

                case "talk":        //格式: talk,自己ID,对方ID,对话信息
                    message_Notifition(receiveString);
                    break;

                case "response":    //格式: response,自己会话ID
                    //message_Notifition(receiveString);

                    /*string talkString_response = receiveString.Substring(splitString[0].Length + splitString[1].Length + 2);
                     * new Thread((ThreadStart)delegate
                     * {
                     *  Application.Run(new chat_online(id, talkString_response, true));
                     * }).Start();*/
                    break;
                }
            }
            Thread.CurrentThread.Abort();
            //Application.Exit();
        }
Exemplo n.º 2
0
        private void ReceiveData(object userState)
        {
            TcpUser   user   = (TcpUser)userState;
            TcpClient client = user.client;

            while (!isExit)
            {
                string receiveString          = null;
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(user, out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        RemoveUser(user);
                    }
                    break;
                }

                AsyncSendToClient(user, receiveString);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取单条消息
        /// </summary>
        /// <param name="basicGetMethod">回调函数</param>
        /// <param name="data">传过来,再传回去</param>
        public void BasicGet(ReceiveMessageDelegate <Tuple <bool, string, Dictionary <string, object> > > basicGetMethod, Dictionary <string, object> data = null)
        {
            try
            {
                using (var channel = this.GetConnection().CreateModel())
                {
                    BasicGetResult res = channel.BasicGet(RabbitConfig.QueueName, false);
                    if (res != null)
                    {
                        //普通使用方式BasicGet
                        //noAck = true,不需要回复,接收到消息后,queue上的消息就会清除
                        //noAck = false,需要回复,接收到消息后,queue上的消息不会被清除,直到调用channel.basicAck(deliveryTag, false); queue上的消息才会被清除 而且,在当前连接断开以前,其它客户端将不能收到此queue上的消息

                        IBasicProperties props = res.BasicProperties;
                        bool             t     = res.Redelivered;
                        t = true;
                        string result = Encoding.UTF8.GetString(res.Body);
                        channel.BasicAck(res.DeliveryTag, false);
                        basicGetMethod(new Tuple <bool, string, Dictionary <string, object> >(true, result, data));
                    }
                    else
                    {
                        basicGetMethod(new Tuple <bool, string, Dictionary <string, object> >(false, "未找到所需数据", data));
                    }
                }
            }
            catch (Exception ex)
            {
                //  mqErrCnt++;
                LogCom.WriteExceptToFile(ex, "RabbitMQHelper.BasicGet");
            }
        }
Exemplo n.º 4
0
 //Checks and connect to the client port
 public ConnectPrivateAPIController(int port, ReceiveMessageDelegate messageDelegate)
 {
     _port     = port;
     _serverEp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
     _udpClient.Connect(_serverEp);
     _messageDelegate = messageDelegate;
 }
Exemplo n.º 5
0
 //队列消息消费
 public static void Recive <T>(ReceiveMessageDelegate <T> receiveMethod, MQType mqType)
 {
     if (!bSendMsgUseMQ)
     {
         return;
     }
     RabbitReceiveDic[mqType].Receive(receiveMethod);
 }
Exemplo n.º 6
0
        public static void Subscribe(ReceiveMessageDelegate callback)
        {
            //Initialize("127.0.0.1");

            sub.Subscribe("userLoc", (channel, message) =>
            {
                callback(message.ToString());
            });
        }
Exemplo n.º 7
0
        public AmqpListener(string connectionString, string clientName, string queueName,
                            ReceiveMessageDelegate messageReceiver)
        {
            _ConnectionString = connectionString;
            _ClientName       = clientName;
            _QueueName        = queueName;
            _MessageReceiver  = messageReceiver;

            Connect();
        }
Exemplo n.º 8
0
        /// <summary>
        /// 处理接收的服务器收据
        /// </summary>
        private void ReceiveData()
        {
            string receiveString = null;

            while (!isExit)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(100);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        dgLog("与服务器失去联系,即将开始重新链接...");
                        IsConnect = false;
                    }

                    break;
                }
                //string[] splitString = receiveString.Split(',');
                //string command = splitString[0].ToLower();
                try
                {
                    RevMsg = Derializer(receiveString);
                    if (RevMsg != null)
                    {
                        string str = "2&";
                        str += (int)RevMsg.Order + "&";
                        str += RevMsg.DataInfo;
                        AddTalkMessage(str);
                    }
                    else
                    {
                        AddTalkMessage("消息解析失败:" + receiveString);
                    }
                }
                catch (Exception ex)
                {
                    AddTalkMessage("消息解析失败:" + receiveString);
                }
            }
        }
Exemplo n.º 9
0
        public Monitor(string name)
            : base(HooserProtocolPort, HooserProtocolPort, name)
        {
            Debug.WriteLine(
                "ServiceMonitor listening on port "
                + ListenPort.ToString());

            HoosierMessageBytes = new HoosierMessage(Name).GetBytes();

#if ENABLE_RECEIVE_HANDLER
            ReceiveMessage += new ReceiveMessageDelegate(ReceiveEventHandler);
#endif
        }
Exemplo n.º 10
0
        public Provider(string name)
            : base(HooserProtocolPort, HooserProtocolPort, name)
        {
            Debug.WriteLine(
                "Provider "
                + name
                + " listening on port "
                + ListenPort.ToString());

            HowdyMessageBytes   = new HowdyMessage(Name).GetBytes();
            GoodbyeMessageBytes = new GoodbyeMessage(Name).GetBytes();

            ReceiveMessage += new ReceiveMessageDelegate(ReceiveEventHandler);
        }
Exemplo n.º 11
0
        public Common(int broadcastPort, int listenPort, string name)
        {
            BroadcastPort  = broadcastPort;
            ListenPort     = listenPort;
            Name           = name;
            IgnoreLoopback = true;

            BroadcastEndPoint
                = new IPEndPoint(
                      IPAddress.Broadcast,
                      BroadcastPort);

            ReceiveMessage += new ReceiveMessageDelegate(ReceiveEventHandler);
        }
Exemplo n.º 12
0
    public void SendMessage(byte[] buf, uint reqId, uint resId = 0, ReceiveMessageDelegate callback = null)
    {
        var length = buf.Length + PROTOCOL_ID_WIDTH + MESSAGE_LENGTH_WIDTH + CUSTOM_WIDTH;

        if (length > Constant.NETWORK_CACHE_SIZE)
        {
            return;
        }

        Array.Clear(_headerAll, 0, _headerAll.Length);

        var Bytes = BitConverter.GetBytes(reqId);

        Buffer.BlockCopy(Bytes, 0, _headerAll, 0, Bytes.Length);

        var bufLengthBytes = BitConverter.GetBytes(buf.Length);

        Buffer.BlockCopy(bufLengthBytes, 0, _headerAll, PROTOCOL_ID_WIDTH, bufLengthBytes.Length);

        _sendByteList.Clear();
        _sendByteList.AddRange(_headerAll);
        _sendByteList.AddRange(buf);

        var message = new Message();

        message.data     = _sendByteList.ToArray();
        message.reqId    = reqId;
        message.resId    = resId;
        message.callback = callback;

        lock (_lockSendMessageListObj)
        {
            _sendMessageList.Add(message);
        }

        if (resId != 0 && callback != null)
        {
            lock (_lockCachedSendMessageListObj)
            {
                _cachedSendMessageList.Add(message);
            }
        }

        if (_sendThread == null || !_sendThread.IsAlive)
        {
            _sendThread = new Thread(new ThreadStart(Send));
            _sendThread.IsBackground = true;
            _sendThread.Start();
        }
    }
Exemplo n.º 13
0
    void MessageReceived(Operation op, string message, string destinationName, string senderName)
    {
        ReceiveMessageDelegate msgRec;

        switch (op)
        {
        case Operation.NewMessage:
            if (self.Name.Equals(destinationName) && active && senderName.Equals(otherUser))
            {
                msgRec = new ReceiveMessageDelegate(NewMessage);
                BeginInvoke(msgRec, message);
            }
            break;
        }
    }
Exemplo n.º 14
0
        /// <summary>
        /// 处理接收的服务器端数据
        /// </summary>
        private void ReceiveData()
        {
            string receiveString = null;

            while (isExit == false)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (result.IsCompleted == false)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (isExit == false)
                    {
                        MessageBox.Show("与服务器失去联系。");
                    }
                    break;
                }
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "login":      //格式:login,用户名
                    AddOnline(splitString[1]);
                    break;

                case "logout":      //格式:logout,用户名
                    RemoveUserName(splitString[1]);
                    break;

                case "talk":      //格式:talk,用户名,对话信息
                    AddTalkMessage(splitString[1] + ":\r\n");
                    AddTalkMessage(receiveString.Substring(
                                       splitString[0].Length + splitString[1].Length + 2));
                    break;
                }
            }
            Application.Exit();
        }
Exemplo n.º 15
0
        protected void Start_Click(object sender, EventArgs e)
        {
            FleckLog.Level = LogLevel.Debug;

            WebSocketServer server = new WebSocketServer("ws://127.0.0.1:8181");

            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
                };
            });

            ReceiveMessageDelegate cb = ReceiveMessageCallback;

            RedisService.Initialize("127.0.0.1");
            RedisService.Subscribe(cb);
            definePostitionList(80);

            while (true)
            {
                foreach (var pos in posList)
                {
                    pos.change();
                    var json = serializer.Serialize(pos);
                    Console.WriteLine(json);
                    String input = json;
                    foreach (var socket in allSockets.ToList())
                    {
                        //socket.Send(input);
                        RedisService.publish(input);
                    }
                }
                Thread.Sleep(3000);
            }
        }
Exemplo n.º 16
0
 private void ReceiveAccept()
 {
     while (true)
     {
         var client = new Client();
         try
         {
             client.ClientSocket = _socket.Accept();
             AddRunningInfo(">> " + DateTime.Now.ToString(CultureInfo.InvariantCulture) + " Client[" +
                            client.ClientSocket.RemoteEndPoint + "] connected.");
             _receiveMessageDelegate = ReceiveMessages;
             _receiveMessageDelegate.BeginInvoke(client, ReceiveMessagesCallback, "");
         }
         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }
     }
 }
Exemplo n.º 17
0
 private void ReceiveAccept()
 {
     while (true)
     {
         Client client = new Client();
         try
         {
             client.ClientSocket = m_serverSocket.Accept();
             this.AddRunningInfo(">> " + DateTime.Now.ToString() + " Client[" + client.ClientSocket.RemoteEndPoint.ToString() + "] connected.");
             receiveMessageDelegate = new ReceiveMessageDelegate(ReceiveMessages);
             receiveMessageDelegate.BeginInvoke(client, ReceiveMessagesCallback, "");
         }
         catch (Exception ex)
         {
             //  throw new Exception(ex.Message);
             MessageBox.Show(ex.Message);
         }
     }
 }
Exemplo n.º 18
0
        //<summary>
        //处理接收的客户端信息
        //</summary>
        //<param name="userState">客户端信息</param>
        private void ReceiveData(object obj)
        {
            ClientUser user   = (ClientUser)obj;
            TcpClient  client = user.Client;

            while (user.IsNormalExit == false)
            {
                string receiveString = null;
                lock (objlock)
                {
                    AddUser(user);
                    ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                    IAsyncResult           result = d.BeginInvoke(user, out receiveString, null, null);
                    if (!result.IsCompleted)
                    {
                        d.EndInvoke(out receiveString, result);
                    }
                }
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// 处理接收的服务器收据
        /// </summary>
        private void ReceiveData()
        {
            string receiveString = null;

            while (!isExit)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        if (MessageBox.Show("与服务器失去联系") == DialogResult.OK)
                        {
                            connectWork.RunWorkerAsync();//重新连接
                        }
                    }
                    break;
                }


                // 接收到的数据处理
                ReceiveMes(receiveString);
            }
        }
Exemplo n.º 20
0
 /// <summary>处理接收数据</summary>
 private void ReceiveData()
 {
     string receiveString = null;
     while (isExit == false)
     {
         ReceiveMessageDelegate d = new ReceiveMessageDelegate(ReceiveMessage);
         IAsyncResult result = d.BeginInvoke(out receiveString, null, null);
         //使用轮询方式来判断异步操作是否完成
         while (result.IsCompleted == false)
         {
             if (isExit)
             {
                 break;
             }
             Thread.Sleep(250);
         }
         //获取Begin方法的返回值和所有输入/输出参数
         d.EndInvoke(out receiveString, result);
         if(receiveString==null)
         {
             if (isExit == false)
             {
                 MessageBox.Show("与服务器失去联系,游戏无法继续!");
             }
             if (side != -1)
             {
                 ExitFormPlaying();
             }
             side = -1;
             isExit = true;
             //结束线程
             break;
         }
         service.AddItemToListBox("收到:" + receiveString);
         string[] splitString = receiveString.Split(',');
         string command = splitString[0].ToLower();
         switch (command)
         {
             case "sorry":
                 MessageBox.Show("连接成功,但游戏室人数已满,无法进入。");
                 break;
             case "tables":
                 //字符串格式:Tables,各桌是否有人的字符串
                 //其中每位表示一个座位,1表示有人,0表示无人
                 string s = splitString[1];
                 //如果maxPlayingTables为0,说明尚未创建checkBoxGameTables
                 if (maxPlayingTables == 0)
                 {
                     //计算所开桌数
                     maxPlayingTables = s.Length / 2;
                     checkBoxGameTables = new CheckBox[maxPlayingTables, 2];
                     isReceiveCommand = true;
                     //将CheckBox对象添加到数组中,以便管理
                     for (int i = 0; i < maxPlayingTables; i++)
                     {
                         AddCheckBoxToPanel(s, i);
                     }
                     isReceiveCommand = false;
                 }
                 else
                 {
                     isReceiveCommand = true;
                     for (int i = 0; i < maxPlayingTables; i++)
                     {
                         for (int j = 0; j < 2; j++)
                         {
                             if (s[2 * i + j] == '0')
                             {
                                 UpdateCheckBox(checkBoxGameTables[i, j], false);
                             }
                             else
                             {
                                 UpdateCheckBox(checkBoxGameTables[i, j], true);
                             }
                         }
                     }
                     isReceiveCommand = false;
                 }
                 break;
             case "sitdown":
                 //格式:SitDown,座位号,用户名
                 formPlaying.SetTableSideText(splitString[1], splitString[2],
                         string.Format("{0}进入", splitString[2]));
                 break;
             case "getup":
                 //格式:GetUp,座位号,用户名
                 //自己或者对方离座
                 if (side == int.Parse(splitString[1]))
                 {
                     //自己离座
                     side = -1;
                 }
                 else
                 {
                     //对方离座
                     formPlaying.SetTableSideText(splitString[1], "",
                         string.Format("{0}退出", splitString[2]));
                     formPlaying.Restart("敌人逃跑了,我方胜利了");
                 }
                 break;
             case "lost":
                 //格式:Lost,座位号,用户名
                 //对家与服务器失去联系
                 formPlaying.SetTableSideText(splitString[1], "",
                     string.Format("[{0}]与服务器失去联系", splitString[2]));
                 formPlaying.Restart("对家与服务器失去联系,游戏无法继续");
                 break;
             case "talk":
                 //格式:Talk,说话者,对话内容
                 if (formPlaying != null)
                 {
                     //由于说话内容可能包含逗号,所以需要特殊处理
                     formPlaying.ShowTalk(splitString[1],
                         receiveString.Substring(splitString[0].Length +
                         splitString[1].Length + splitString[2].Length + 3));
                 }
                 break;
             case "message":
                 //格式:Message,内容
                 //服务器自动发送的一般信息(比如进入游戏桌入座等)
                 formPlaying.ShowMessage(splitString[1]);
                 break;
             case "level":
                 //设置难度级别
                 //格式:Time,桌号,难度级别
                 formPlaying.SetLevel(splitString[2]);
                 break;
             case "setdot":
                 //产生的棋子位置信息
                 //格式:Setdot,行,列,颜色
                 formPlaying.SetDot(
                     int.Parse(splitString[1]),
                     int.Parse(splitString[2]),
                     (DotColor)int.Parse(splitString[3]));
                 break;
             case "unsetdot":
                 //消去棋子的信息
                 //格式:UnsetDot,行,列,黑方成绩,白方成绩
                 int x = 20 * (int.Parse(splitString[1]) + 1);
                 int y = 20 * (int.Parse(splitString[2]) + 1);
                 formPlaying.UnsetDot(x, y);
                 formPlaying.SetGradeText(splitString[3], splitString[4]);
                 break;
             case "win":
                 //格式:Win,相邻棋子的颜色,黑方成绩,白方成绩
                 string winner = "";
                 if ((DotColor)int.Parse(splitString[1]) == DotColor.Black)
                 {
                     winner = "黑方出现五子相连,黑方胜利!";//edit
                 }
                 else
                 {
                     winner = "白方出现五子相连,白方胜利!";//edit
                 }
                 formPlaying.ShowMessage(winner);
                 formPlaying.Restart(winner);
                 break;
         }
     }
     //接收线程结束后,游戏继续进行已经没有意义,所以直接退出程序
     Application.Exit();
 }
Exemplo n.º 21
0
        private void ReceiveData(object userState)
        {
            User      user   = (User)userState;
            TcpClient client = user.client;

            while (!isExit)
            {
                string receiveString          = null;
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(user, out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        AddItemToListBox(string.Format("与{0}失去联系,已终止接收该用户信息", client.Client.RemoteEndPoint));
                        RemoveUser(user);
                    }
                    break;
                }
                AddItemToListBox(string.Format("来自[{0}]:{1}", user.client.Client.RemoteEndPoint, receiveString));
                string[] splitString = receiveString.Split(',');
                switch (splitString[0])
                {
                case "Login":
                    user.userName = splitString[1];
                    AsyncSendToAllClient(user, receiveString);
                    break;

                case "Logout":
                    AsyncSendToAllClient(user, receiveString);
                    RemoveUser(user);
                    return;

                case "Talk":
                    string talkString = receiveString.Substring(splitString[0].Length + splitString[1].Length + 2);
                    AddItemToListBox(string.Format("{0}对{1}说:{2}", user.userName, splitString[1], talkString));
                    foreach (User target in userList)
                    {
                        if (target.userName == splitString[1])
                        {
                            AsyncSendToClient(target, "talk," + user.userName + "," + talkString);
                            break;
                        }
                    }
                    break;

                default:
                    AddItemToListBox("什么意思啊:" + receiveString);
                    break;
                }
            }
        }
Exemplo n.º 22
0
        // 处理接收的服务器收据

        private void ReceiveData()
        {
            string receiveString = null;

            while (!isExit)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        MessageBox.Show("与服务器失去联系");
                    }
                    break;
                }
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "login":       //格式: login,用户名
                    break;

                case "logout":      //格式: logout,用户名
                    if (splitString[1].Equals(aim_id_temp) || splitString[1].Equals(aim_id))
                    {
                        isExit = true;    //做一个委托;
                    }
                    break;

                case "talk":        //格式: talk,用户名,对话信息
                    AddTalkMessage(id_name[splitString[1].Split('_')[0]] + ":\r\n");
                    AddTalkMessage(receiveString.Substring(splitString[0].Length + splitString[1].Length + 2));
                    break;

                /*case "response"://格式: response,自己会话ID
                 *  AsyncSendMessage("_response," + id);
                 *  break;*/
                case "_response":     // _response,对方会话ID
                    isCat = true;
                    string talkString_response_ = receiveString.Substring(splitString[0].Length + splitString[1].Length + 2);
                    SetTextInputEnable(true);
                    aim_id = talkString_response_;
                    break;

                case "NoFound":
                    isCat  = false;
                    aim_id = aim_id.Split('_')[0];
                    break;

                case "?":
                    AsyncSendMessage("!," + aim_id + "," + id);
                    break;

                case "!":
                    isCat  = true;
                    isRece = false;
                    break;
                }
            }
            Thread.CurrentThread.Abort();
            File.Delete(Application.StartupPath + "\\temp_" + aim_id + ".bin");
        }
Exemplo n.º 23
0
        /// <summary>
        /// 接受消息,使用委托进行处理,使用 EventingBasicConsumer 方法,3.6.12版本服务器接收出错
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="receiveMethod"></param>
        public void Receive2 <T>(ReceiveMessageDelegate <T> receiveMethod)
        {
            try
            {
                using (var channel = this.GetConnection().CreateModel())
                {
                    //是否使用路由
                    if (!string.IsNullOrWhiteSpace(this.RabbitConfig.Exchange))
                    {
                        //声明路由
                        //   channel.ExchangeDeclare(this.RabbitConfig.Exchange, this.RabbitConfig.ExchangeType.ToString(), this.RabbitConfig.DurableQueue);

                        //声明队列且与交换机绑定
                        channel.QueueDeclare(this.RabbitConfig.QueueName, this.RabbitConfig.DurableQueue, false, false, null);
                        // channel.QueueBind(this.RabbitConfig.QueueName, this.RabbitConfig.Exchange, this.RabbitConfig.RoutingKey);
                    }
                    else
                    {
                        channel.QueueDeclare(this.RabbitConfig.QueueName, this.RabbitConfig.DurableQueue, false, false, null);
                    }

                    //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                    channel.BasicQos(0, 1, false);  ///告诉RabbitMQ同一时间给一个消息给消费者
                    //在队列上定义一个消费者
                    var consumer = new EventingBasicConsumer(channel);

                    //消费队列,并设置应答模式为程序主动应答,oAck设置false,告诉broker,发送消息之后,消息暂时不要删除,等消费者处理完成再说
                    channel.BasicConsume(this.RabbitConfig.QueueName, false, consumer);

                    consumer.Received += (model, ea) =>
                    {
                        ProcessingResultsEnum processingResult = ProcessingResultsEnum.Retry;
                        ulong deliveryTag = 0;
                        try
                        {
                            //获取信息
                            deliveryTag = ea.DeliveryTag;
                            byte[] bytes = ea.Body;
                            string str   = Encoding.UTF8.GetString(bytes);

                            T v = SerializerHelper.DeserializeToObject <T>(str);
                            receiveMethod(v);
                            processingResult = ProcessingResultsEnum.Accept; //处理成功
                                                                             //   channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); //处理完成,告诉Broker可以服务端可以删除消息,分配新的消息过来
                        }
                        catch (Exception ex)
                        {
                            LogCom.WriteExceptToFile(ex, "RabbitMQHelper.Receive");
                            processingResult = ProcessingResultsEnum.Reject; //系统无法处理的错误
                        }
                        finally
                        {
                            System.Threading.Thread.Sleep(100);//暂停0.1秒,防止CPU爆满的问题

                            switch (processingResult)
                            {
                            case ProcessingResultsEnum.Accept:
                                //回复确认处理成功
                                channel.BasicAck(deliveryTag, false);
                                break;

                            case ProcessingResultsEnum.Retry:
                                //发生错误了,但是还可以重新提交给队列重新分配
                                channel.BasicNack(deliveryTag, false, true);
                                break;

                            case ProcessingResultsEnum.Reject:
                                //发生严重错误,无法继续进行,这种情况应该写日志或者是发送消息通知管理员
                                channel.BasicNack(deliveryTag, false, false);

                                //写日志
                                break;
                            }
                        }
                    };
                }
            }
            catch (Exception ex)
            {
                LogCom.WriteExceptToFile(ex, "RabbitMQHelper.Receive");
            }
        }
Exemplo n.º 24
0
        /// <summary>
        /// 接受消息,使用委托进行处理,使用QueueingBasicConsumer方法(已过时)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="receiveMethod"></param>
        public ExeResEdm Receive <T>(ReceiveMessageDelegate <T> receiveMethod)
        {
            ExeResEdm exeResEdm = new ExeResEdm()
            {
            };

            try
            {
                using (var channel = this.GetConnection().CreateModel())
                {
                    //是否使用路由
                    if (!string.IsNullOrWhiteSpace(this.RabbitConfig.Exchange))
                    {
                        //声明路由
                        //   channel.ExchangeDeclare(this.RabbitConfig.Exchange, this.RabbitConfig.ExchangeType.ToString(), this.RabbitConfig.DurableQueue);

                        //声明队列且与交换机绑定
                        channel.QueueDeclare(this.RabbitConfig.QueueName, this.RabbitConfig.DurableQueue, false, false, null);
                        channel.QueueBind(this.RabbitConfig.QueueName, this.RabbitConfig.Exchange, this.RabbitConfig.RoutingKey);
                    }
                    else
                    {
                        channel.QueueDeclare(this.RabbitConfig.QueueName, this.RabbitConfig.DurableQueue, false, false, null);
                    }

                    //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                    channel.BasicQos(0, 1, false);  ///告诉RabbitMQ同一时间给一个消息给消费者
                    //在队列上定义一个消费者
                    var consumer = new QueueingBasicConsumer(channel);
                    //消费队列,并设置应答模式为程序主动应答
                    channel.BasicConsume(this.RabbitConfig.QueueName, false, consumer);

                    while (true)
                    {
                        //阻塞函数,获取队列中的消息
                        ProcessingResultsEnum processingResult = ProcessingResultsEnum.Retry;
                        ulong deliveryTag = 0;
                        try
                        {
                            //获取信息
                            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                            deliveryTag = ea.DeliveryTag;
                            byte[] bytes = ea.Body;
                            string str   = Encoding.UTF8.GetString(bytes);

                            T v = SerializerHelper.DeserializeToObject <T>(str);
                            receiveMethod(v);
                            processingResult = ProcessingResultsEnum.Accept; //处理成功
                        }
                        catch                                                //(Exception ex)
                        {
                            processingResult = ProcessingResultsEnum.Reject; //系统无法处理的错误
                        }
                        finally
                        {
                            System.Threading.Thread.Sleep(100);//暂停0.1秒,防止CPU爆满的问题

                            switch (processingResult)
                            {
                            case ProcessingResultsEnum.Accept:
                                //回复确认处理成功
                                channel.BasicAck(deliveryTag, false);
                                break;

                            case ProcessingResultsEnum.Retry:
                                //发生错误了,但是还可以重新提交给队列重新分配
                                channel.BasicNack(deliveryTag, false, true);
                                break;

                            case ProcessingResultsEnum.Reject:
                                //发生严重错误,无法继续进行,这种情况应该写日志或者是发送消息通知管理员
                                channel.BasicNack(deliveryTag, false, false);

                                //写日志
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                exeResEdm.ErrCode = 1;
                exeResEdm.ExBody  = ex;
                exeResEdm.Module  = "RabbitMQHelper.Receive方法";
                LogCom.WriteExceptToFile(ex, "RabbitMQHelper.Receive");
            }
            return(exeResEdm);
        }
Exemplo n.º 25
0
 public void RegisterReceiveMessageEvent(ReceiveMessageDelegate receiveMessageDelegate)
 {
     MessageReceived += receiveMessageDelegate;
 }
Exemplo n.º 26
0
 public static void ListenForMessages(ReceiveMessageDelegate listener)
 {
     _messageListeners += listener;
 }
Exemplo n.º 27
0
        /// <summary>
        /// 处理接收的服务器收据
        /// </summary>
        private void ReceiveData()
        {
            string receiveString = null;
            while (!isExit)
            {
                ReceiveMessageDelegate d = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                        break;
                    Thread.Sleep(100);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        dgLog("与服务器失去联系,即将开始重新链接...");
                        IsConnect = false;
                    }

                    break;
                }
                //string[] splitString = receiveString.Split(',');
                //string command = splitString[0].ToLower();
                try
                {
                    RevMsg = Derializer(receiveString);
                    if (RevMsg != null)
                    {

                        string str = "2&";
                        str += (int) RevMsg.Order + "&";
                        str += RevMsg.DataInfo;
                        AddTalkMessage(str);
                    }
                    else
                    {
                        AddTalkMessage("消息解析失败:"+receiveString);
                    }
                }
                catch (Exception ex)
                {
                    AddTalkMessage("消息解析失败:"+receiveString);
                }

            }
            
           
        }
Exemplo n.º 28
0
        private void ReceiveData(object userState)
        {
            ServerInfo info = (ServerInfo)userState;
            TcpClient client = info.client;
            while (!isExit)
            {
                string receiveString = null;
                ReceiveMessageDelegate d = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult result = d.BeginInvoke(info, out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                        break;
                    Thread.Sleep(100);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        dgLog(string.Format("与{0} {1}失去联系,已终止接收该用户信息", info.Content.ClientName, client.Client.RemoteEndPoint));
                        dgRomoveCilent(info);
                    }
                    break;
                }
                //dgLog(string.Format("来自[{0}]:{1}", info.Content.ClientName, info.Content.DataInfo));
                string[] splitString = receiveString.Split(',');
                switch (info.Content.Order)
                {
                    case SocketOrder.Login:
                        dgLog(string.Format("客户端{0}上线:{1}", info.Content.ClientName, info.client.Client.RemoteEndPoint));
                        dgAddClient(info);
                        InfoList.Add(info);
                        break;
                    case SocketOrder.Logout:
                        dgLog(string.Format("客户端{0}下线:{1}", info.Content.ClientName, info.client.Client.RemoteEndPoint));
                        dgRomoveCilent(info);
                        InfoList.Remove(info);
                        break;

                    case SocketOrder.StartReg:
                        AsyncSendToClient(info);
                        break;
                    case SocketOrder.RegSuccess:
                        AsyncSendToClient(info);
                        break;
                    case SocketOrder.StartCckq:
                        AsyncSendToClient(info);
                        break;
                    case SocketOrder.CckqSuccess:
                        AsyncSendToClient(info);
                        break;

                    case SocketOrder.StartTckq:
                        AsyncSendToClient(info);
                        break;

                    case SocketOrder.TckqSuccess:
                        AsyncSendToClient(info);
                        break;

                    case SocketOrder.StartDown:
                        AsyncSendToClient(info);
                        break;
                    case SocketOrder.DownSuccess:
                        AsyncSendToClient(info);
                        break;
                    default:
                        AsyncSendToClient(info);
                        dgLog("未知命令[已转发]:" + info.Content.Order);
                        break;
                }
            }
        }
Exemplo n.º 29
0
        private void ReceiveData(object userState)
        {
            ServerInfo info   = (ServerInfo)userState;
            TcpClient  client = info.client;

            while (!isExit)
            {
                string receiveString          = null;
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(info, out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(100);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        dgLog(string.Format("与{0} {1}失去联系,已终止接收该用户信息", info.Content.ClientName, client.Client.RemoteEndPoint));
                        dgRomoveCilent(info);
                    }
                    break;
                }
                //dgLog(string.Format("来自[{0}]:{1}", info.Content.ClientName, info.Content.DataInfo));
                string[] splitString = receiveString.Split(',');
                switch (info.Content.Order)
                {
                case SocketOrder.Login:
                    dgLog(string.Format("客户端{0}上线:{1}", info.Content.ClientName, info.client.Client.RemoteEndPoint));
                    dgAddClient(info);
                    InfoList.Add(info);
                    break;

                case SocketOrder.Logout:
                    dgLog(string.Format("客户端{0}下线:{1}", info.Content.ClientName, info.client.Client.RemoteEndPoint));
                    dgRomoveCilent(info);
                    InfoList.Remove(info);
                    break;

                case SocketOrder.StartReg:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.RegSuccess:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.StartCckq:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.CckqSuccess:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.StartTckq:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.TckqSuccess:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.StartDown:
                    AsyncSendToClient(info);
                    break;

                case SocketOrder.DownSuccess:
                    AsyncSendToClient(info);
                    break;

                default:
                    AsyncSendToClient(info);
                    dgLog("未知命令[已转发]:" + info.Content.Order);
                    break;
                }
            }
        }
Exemplo n.º 30
0
        private void ReceiveData(object userState)
        {
            User      user   = (User)userState;
            TcpClient client = user.client;

            while (!Instance.ISExit)
            {
                string receive                = string.Empty;
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(user, out receive, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (Instance.ISExit)
                    {
                        break;
                    }
                    Thread.Sleep(50);
                    //Thread.Sleep(100);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receive, result);
                if (receive.Length == 0 || receive == null)
                {
                    if (!Instance.ISExit)
                    {
                        //日志
                        Console.WriteLine(string.Format("与{0}失去联系,已终止接收该用户信息", user.IP));
                        RemoveUser(user);
                    }
                    break;
                }

                string        aswer  = string.Empty;
                CommandManage manage = new CommandManage();
                try
                {
                    Console.WriteLine("接受:" + receive);

                    aswer = manage.Proc(receive);

                    Console.WriteLine("应答:" + aswer);
                }
                catch
                {
                    manage.CloseUser = true;
                }

                //foreach (User target in Instance.UserList)
                //{
                //    if (target.IP == client.Client.RemoteEndPoint.ToString())
                //    {
                //        AsyncSendToClient(target, aswer);
                //    }
                //}

                AsyncSendToClient(user, aswer);

                if (manage.CloseUser)
                {
                    this.RemoveUser(user);
                }
            }
        }
Exemplo n.º 31
0
        /// <summary>
        /// 处理接收的服务器收据
        /// </summary>
        private void ReceiveData()
        {
            string receiveString = null;

            while (!isExit)
            {
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(receiveMessage);
                IAsyncResult           result = d.BeginInvoke(out receiveString, null, null);
                //使用轮询方式来盘点异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        MessageBox.Show("与服务器失去联系");
                    }
                    break;
                }
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0];
                switch (command)
                {
                case "Login":       //格式: login,用户名
                    for (int i = 0; i < userInfo.Length; i++)
                    {
                        if (userInfo[i, 0] != null)
                        {
                            continue;
                        }
                        else
                        {
                            userInfo[i, 0] = splitString[1].Substring(245);
                            userInfo[i, 1] = splitString[1];
                            AddOnline(userInfo[i, 0]);
                            //MessageBox.Show("dan yonghuming: "+userInfo[i, 0] + "\n wanzhengmingzi: " + userInfo[i, 1]);
                            break;
                            //rtf_SendMessage.Text = userInfo[i, 0] + "\n" + userInfo[i, 1];
                        }
                    }
                    //AddOnline(splitString[1]);
                    break;

                case "Logout":      //格式: logout,用户名
                    RemoveUserName(splitString[1].Substring(245));
                    break;

                case "Talk":        //格式: talk,用户名,对话信息
                    AddTalkMessage(splitString[1].Substring(245) + " to " + txt_UserName.Text + ":\r\n");
                    string finalmessage = SRSA.Decrypt(splitString[2]);
                    AddTalkMessage(finalmessage + "\n");

                    //AddTalkMessage(receiveString.Substring(splitString[0].Length + splitString[1].Length + 2));
                    break;
                }
            }
            Application.Exit();
        }
Exemplo n.º 32
0
 /// <summary>
 /// 接收、处理客户端信息,每客户1个线程,参数用于区分是哪个客户
 /// </summary>
 /// <param name="obj">客户端</param>
 private void ReceiveData(object obj)
 {
     User user = (User)obj;
     TcpClient client = user.client;
     while (isExit == false)
     {
         string receiveString = null;
         ReceiveMessageDelegate d = new ReceiveMessageDelegate(ReceiveMessage);
         IAsyncResult result = d.BeginInvoke(user, out receiveString, null, null);
         //使用轮询方式来判断异步操作是否完成
         while (result.IsCompleted == false)
         {
             if (isExit)
             {
                 break;
             }
             Thread.Sleep(250);
         }
         //获取Begin方法的返回值和所有输入/输出参数
         d.EndInvoke(out receiveString, result);
         if(receiveString==null)
         {
             if (isExit == false)
             {
                 service.AddItem(string.Format("与[{0}]失去联系,已终止接收该用户信息", client.Client.RemoteEndPoint));
                 RemoveClientfromPlayer(user);
             }
             break;
         }
         service.AddItem(string.Format("来自{0}:{1}", user.userName, receiveString));
         string[] splitString = receiveString.Split(',');
         int tableIndex = -1;    //桌号
         int side = -1;          //座位号
         int anotherSide = -1;   //对方座位号
         string sendString = "";
         string command = splitString[0].ToLower();
         switch (command)
         {
             case "login":
                 //格式:Login,昵称
                 //该用户刚刚登录
                 if (userList.Count > maxUsers)
                 {
                     sendString = "Sorry";
                     service.AsyncSendToOne(user, sendString);
                     service.AddItem("人数已满,拒绝" +
                         splitString[1] + "进入游戏室");
                     RemoveClientfromPlayer(user);
                 }
                 else
                 {
                     //将用户昵称保存到用户列表中
                     //由于是引用类型,因此直接给user赋值也就是给userList中对
                     //应的user赋值
                     //用户名中包含其IP和端口的目的是为了帮助理解,实际游戏
                     //中一般不会显示IP的
                     user.userName = string.Format("[{0}--{1}]", splitString[1],
                         client.Client.RemoteEndPoint);
                     //允许该用户进入游戏室,即将各桌是否有人情况发送给该用户
                     sendString = "Tables," + this.GetOnlineString();
                     service.AsyncSendToOne(user, sendString);
                 }
                 break;
             case "logout":
                 //格式:Logout
                 //用户退出游戏室
                 service.AddItem(string.Format("{0}退出游戏室", user.userName));
                 RemoveClientfromPlayer(user);
                 return;
             case "sitdown":
                 //格式:SitDown,桌号,座位号
                 //该用户坐到某座位上
                 tableIndex = int.Parse(splitString[1]);
                 side = int.Parse(splitString[2]);
                 gameTable[tableIndex].gamePlayer[side].user = user;
                 gameTable[tableIndex].gamePlayer[side].someone = true;
                 service.AddItem(string.Format(
                     "{0}在第{1}桌第{2}座入座",
                     user.userName, tableIndex + 1, side + 1));
                 //得到对家座位号
                 anotherSide = (side + 1) % 2;
                 //判断对方是否有人
                 if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true)
                 {
                     //先告诉该用户对家已经入座
                     //发送格式:SitDown,座位号,用户名
                     sendString = string.Format("SitDown,{0},{1}", anotherSide,
                       gameTable[tableIndex].gamePlayer[anotherSide].user.userName);
                     service.AsyncSendToOne(user, sendString);
                 }
                 //同时告诉两个用户该用户入座(也可能对方无人)
                 //发送格式:SitDown,座位号,用户名
                 sendString = string.Format("SitDown,{0},{1}", side, user.userName);
                 service.SendToBoth(gameTable[tableIndex], sendString);
                 //重新将游戏室各桌情况发送给所有用户
                 service.SendToAll(userList, "Tables," + this.GetOnlineString());
                 break;
             case "getup":
                 //格式:GetUp,桌号,座位号
                 //用户离开座位,回到游戏室
                 tableIndex = int.Parse(splitString[1]);
                 side = int.Parse(splitString[2]);
                 service.AddItem(
                      string.Format("{0}离座,返回游戏室", user.userName));
                 gameTable[tableIndex].StopTimer();
                 //将离座信息同时发送给两个用户,以便客户端作离座处理
                 //发送格式:GetUp,座位号,用户名
                 service.SendToBoth(gameTable[tableIndex],
                     string.Format("GetUp,{0},{1}", side, user.userName));
                 //服务器进行离座处理
                 gameTable[tableIndex].gamePlayer[side].someone = false;
                 gameTable[tableIndex].gamePlayer[side].started = false;
                 gameTable[tableIndex].gamePlayer[side].grade = 0;
                 anotherSide = (side + 1) % 2;
                 if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true)
                 {
                     gameTable[tableIndex].gamePlayer[anotherSide].started = false;
                     gameTable[tableIndex].gamePlayer[anotherSide].grade = 0;
                 }
                 //重新将游戏室各桌情况发送给所有用户
                 service.SendToAll(userList, "Tables," + this.GetOnlineString());
                 break;
             case "level":
                 //格式:Time,桌号,难度级别
                 //设置难度级别
                 tableIndex = int.Parse(splitString[1]);
                 gameTable[tableIndex].SetTimerLevel((6 - int.Parse(splitString[2])) * 100);
                 service.SendToBoth(gameTable[tableIndex], receiveString);
                 break;
             case "talk":
                 //格式:Talk,桌号,对话内容
                 tableIndex = int.Parse(splitString[1]);
                 //由于说话内容可能包含逗号,所以需要特殊处理
                 sendString = string.Format("Talk,{0},{1}", user.userName,
                     receiveString.Substring(splitString[0].Length +
                     splitString[1].Length));
                 service.SendToBoth(gameTable[tableIndex], sendString);
                 break;
             case "start":
                 //格式:Start,桌号,座位号
                 //该用户单击了开始按钮
                 tableIndex = int.Parse(splitString[1]);
                 side = int.Parse(splitString[2]);
                 gameTable[tableIndex].gamePlayer[side].started = true;
                 if (side == 0)
                 {
                     anotherSide = 1;
                     sendString = "Message,黑方已开始。";
                 }
                 else
                 {
                     anotherSide = 0;
                     sendString = "Message,白方已开始。";
                 }
                 service.SendToBoth(gameTable[tableIndex], sendString);
                 if (gameTable[tableIndex].gamePlayer[anotherSide].started == true)
                 {
                     gameTable[tableIndex].ResetGrid();
                     //gameTable[tableIndex].StartTimer();
                     gameTable[tableIndex].Turn = 0;
                 }
                 break;
             case "unsetdot":
                 //格式:UnsetDot,桌号,座位号,行,列,颜色
                 //消去客户单击的棋子
                 tableIndex = int.Parse(splitString[1]);
                 side = int.Parse(splitString[2]);
                 int xi = int.Parse(splitString[3]);
                 int xj = int.Parse(splitString[4]);
                 int color = int.Parse(splitString[5]);
                 gameTable[tableIndex].UnsetDot(xi, xj, color);
                 break;
             case "setdot"://edit
                 tableIndex = int.Parse(splitString[1]);
                 side = int.Parse(splitString[2]);
                 int xit = int.Parse(splitString[3]);
                 int xjt = int.Parse(splitString[4]);
                 int colort = int.Parse(splitString[5]);
                 gameTable[tableIndex].SetDot(xit, xjt, colort);
                 break;
             default:
                 service.SendToAll(userList, "什么意思啊:" + receiveString);
                 break;
         }
     }
     userList.Remove(user);
     client.Close();
     service.AddItem(string.Format("有一个退出,剩余连接用户数:{0}", userList.Count));
 }
Exemplo n.º 33
0
 public void RegisterReceiveMessageEvent(ReceiveMessageDelegate <ManagementPacket> receiveMessage)
 {
     MessageReceived += receiveMessage;
 }
Exemplo n.º 34
0
 public static void StopListeningForMessages(ReceiveMessageDelegate listener)
 {
     _messageListeners -= listener;
 }