示例#1
0
        private void ReceiveCards()
        {
            int clientMailslotHandle;   // дескриптор мэйлслота

            clientMailslotHandle = Mailslot.CreateMailslot("\\\\.\\mailslot\\ReceiveCardsMailslot", 0, Types.MAILSLOT_WAIT_FOREVER, 0);
            Card card            = new Card(); // прочитанное сообщение
            Card prevCard        = new Card(); // для проверки в случае, когда отправляется одно и то же сообщение несколько раз
            int  mailslotSize    = 0;          // максимальный размер сообщения
            int  nextMessageSize = 0;          // размер следующего сообщения
            int  messageCount    = 0;          // количество сообщений в мэйлслоте
            uint realBytesReaded = 0;          // количество реально прочитанных из мэйлслота байтов

            while (work)
            {
                Mailslot.GetMailslotInfo(clientMailslotHandle, mailslotSize, ref nextMessageSize, ref messageCount, 0);
                if (messageCount > 0)
                {
                    for (int i = 0; i < messageCount; i++)
                    {
                        byte[] bytes = new byte[400];
                        // "Принудительная" запись данных, расположенные в буфере операционной системы, в файл мэйлслота
                        Mailslot.FlushFileBuffers(clientMailslotHandle);
                        Mailslot.ReadFile(clientMailslotHandle, bytes, 400, ref realBytesReaded, 0);
                        BinaryFormatter formatter = new BinaryFormatter();
                        using (MemoryStream memory = new MemoryStream(bytes))
                        {
                            card = (Card)formatter.Deserialize(memory);
                            // Если пришла карта с CardSuit.Count, CardQuality.Count (признак окончания раздачи) очищаем столл
                            if (card.Equals(new Card(CardSuit.Count, CardQuality.Count)))
                            {
                                CleanTable();
                                continue;
                            }

                            if (!card.Equals(prevCard))
                            {
                                prevCard = card;
                            }
                            else
                            {
                                continue;
                            }
                        }

                        Invoke(new MethodInvoker(() =>
                        {
                            // Выдаем карты на flop'е
                            if (pbFlop1.Image == null)
                            {
                                pbFlop1.Image = Image.FromFile("../../Images/Cards/" + card.suit.ToString() + card.quality.ToString() + ".png");
                                return;
                            }
                            if (pbFlop2.Image == null)
                            {
                                pbFlop2.Image = Image.FromFile("../../Images/Cards/" + card.suit.ToString() + card.quality.ToString() + ".png");
                                return;
                            }
                            if (pbFlop3.Image == null)
                            {
                                pbFlop3.Image = Image.FromFile("../../Images/Cards/" + card.suit.ToString() + card.quality.ToString() + ".png");
                                return;
                            }
                            // Выдаем карты на turn'е
                            if (pbTurn.Image == null)
                            {
                                pbTurn.Image = Image.FromFile("../../Images/Cards/" + card.suit.ToString() + card.quality.ToString() + ".png");
                                return;
                            }
                            // Выдаем карты на river'е
                            if (pbRiver.Image == null)
                            {
                                pbRiver.Image = Image.FromFile("../../Images/Cards/" + card.suit.ToString() + card.quality.ToString() + ".png");
                                return;
                            }
                        }));

                        Thread.Sleep(500);
                    }
                }
            }
        }
示例#2
0
 public Server(string name)
 {
     mailslot        = new Mailslot(name);
     mailslot.Handle = WinFunctions.CreateMailslot(mailslot.Name, 0, 0, IntPtr.Zero);
 }
示例#3
0
 public Client(string nickName, string mailslotName, string mailslotServer)
 {
     this.nickName = nickName;
     mailslot      = new Mailslot(mailslotName);
     target        = Mailslot.GetFullMailslotPath(mailslotServer, mailslotName);
 }