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); } } } }
public Server(string name) { mailslot = new Mailslot(name); mailslot.Handle = WinFunctions.CreateMailslot(mailslot.Name, 0, 0, IntPtr.Zero); }
public Client(string nickName, string mailslotName, string mailslotServer) { this.nickName = nickName; mailslot = new Mailslot(mailslotName); target = Mailslot.GetFullMailslotPath(mailslotServer, mailslotName); }