Example #1
0
        private static void ClientOnDataReceived(object invoker, byte[] data)
        {
            string json          = Encoding.UTF8.GetString(data); // получаем строку из массива байтов
            var    wrappedPacket = WrappedPacket.FromJson(json);  // получаем WrappedPacket, используя полученную строку ответа сервера
            var    packet        = wrappedPacket.GetPacket() as ResponsePacket;

            Console.WriteLine($"Пакет был принят: {(packet.Accepted ? "да" : "нет")}");
        }
Example #2
0
        private static bool ServerOnReceived(object invoker, User sender, byte[] data)
        {
            string receivedText  = Encoding.UTF8.GetString(data);        // получаем текст запроса пользователя
            var    wrappedPacket = WrappedPacket.FromJson(receivedText); //JToken.Parse(Encoding.UTF8.GetString(data)).ToObject(typeof(WrappedPacket)) as WrappedPacket;

            if (wrappedPacket.PacketType == typeof(StringPacket).ToString())
            {
                Console.WriteLine($"{sender.Username}: {(wrappedPacket.GetPacket() as StringPacket).Value}");
                return(true); // возвращаем true, так как пакет принят (в ResponsePacket вернет значение, которое мы здесь возвращаем, т. е. в данном случае true)
            }
            else
            {
                return(false); // мы получили не то, что ожидали, поэтому возвращаем false
            }
        }
Example #3
0
        public bool SendPacket(object packet)
        {
            if (!(packet is Packet))
            {
                throw new ArgumentException("Object is not type of Packet");
            }

            var wrap = new WrappedPacket()
            {
                SenderId   = Id.GetValueOrDefault(),
                PacketType = packet.GetType().ToString(),
                PacketData = JObject.FromObject(packet)
            };

            return(SendData(Encoding.UTF8.GetBytes(JObject.FromObject(wrap).ToString())));
        }
        private void ReceiveCallback(IAsyncResult result)
        {
            var currentResult = (result.AsyncState as KeyValuePair <int, Socket>?).GetValueOrDefault();

            int received = -1;

            try
            {
                received = currentResult.Value.EndReceive(result);
            }
            catch (SocketException)
            {
            }

            var currentUser   = GetUser(currentResult.Key);
            var currentSocket = currentResult.Value;

            if (received == -1)
            {
                currentSocket.Shutdown(SocketShutdown.Both);
                ConnectedClients.RemoveAll(c => c.Socket.Equals(currentResult.Value));
                ClientDisconnected?.Invoke(this, currentUser);
                _serverSocket.BeginAccept(AcceptCallback, null);
                return;
            }

            byte[] recBuf = new byte[received];
            Array.Copy(_buffer, recBuf, received);

            if (Received != null)
            {
                var responsePacket = new ResponsePacket();

                try
                {
                    var sentPacket = WrappedPacket.FromJson(Encoding.UTF8.GetString(recBuf)).GetPacket();
                    responsePacket.SentPacketData = JToken.FromObject(sentPacket);
                    responsePacket.SentPacketType = sentPacket.GetType().ToString();
                }
                catch
                {
                    responsePacket.SentPacketData = JToken.FromObject(new
                    {
                        content = Encoding.UTF8.GetString(recBuf)
                    });
                    responsePacket.SentPacketType = typeof(JToken).ToString();
                }

                responsePacket.Accepted = Received.Invoke(this, currentUser, recBuf);

                var wrappedPacket = new WrappedPacket()
                {
                    PacketType = responsePacket.GetType().ToString(),
                    PacketData = JObject.FromObject(responsePacket)
                };

                currentResult.Value.Send(Encoding.UTF8.GetBytes(JObject.FromObject(wrappedPacket).ToString()));
            }

            currentResult.Value.BeginReceive(_buffer, 0, _bufferSize, SocketFlags.None, ReceiveCallback, currentResult);
        }