Exemple #1
0
        public static void Handle(byte[] payloadBytes, ConnectionInfo connectionInfo)
        {
            var payloadString = Encoding.UTF8.GetString(payloadBytes);

            if (payloadString.StartsWith("subscribe"))
            {
                connectionInfo.Topic = payloadString.Split("subscribe#").LastOrDefault();
                ConnectionStorage.Add(connectionInfo);
            }
            else
            {
                Payload payload = JsonConvert.DeserializeObject <Payload>(payloadString);
                PayloadStorage.Add(payload);
            }
        }
        private void ReceiveCallback(IAsyncResult asyncResult)
        {
            ConnectionInfo connection = asyncResult.AsyncState as ConnectionInfo;

            try
            {
                Socket senderSocket = connection.Socket;
                // vom pastra rezultat returnat daca s-a citit cu succes
                SocketError response;
                int         buffSize = senderSocket.EndReceive(asyncResult, out response);

                if (response == SocketError.Success)
                {
                    byte[] payload = new byte[buffSize];
                    // aici se copie toate datele din stream
                    Array.Copy(connection.Data, payload, payload.Length);

                    PayloadHandler.Handle(payload, connection);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"We cannot receive buffer data: {e.Message}");
            }
            // dupa ce am citit datele din o conexiune trebuie sa ascultam date noi
            finally
            {
                try
                {
                    connection.Socket.BeginReceive(connection.Data, 0, connection.Data.Length,
                                                   SocketFlags.None, ReceiveCallback, connection);
                }
                catch (Exception e)
                {
                    // cand un socket s-a conectat, consulam, si deconectam
                    Console.Write($"{e.Message}");
                    var address = connection.Socket.RemoteEndPoint.ToString();

                    // stergem din storage
                    ConnectionStorage.Remove(address);

                    connection.Socket.Close();
                }
            }
        }
        public static void Handle(byte[] payloadBytes, ConnectionInfo connectionInfo)
        {
            var payloadString = Encoding.UTF8.GetString(payloadBytes);

            if (payloadString.StartsWith("subscribe#"))
            {
                connectionInfo.Topic = payloadString.Split("subscribe#").LastOrDefault();
                // adaugam conexiunea in storage
                ConnectionStorage.Add(connectionInfo);
            }
            else
            {
                // il facem transient
                Payload payload = JsonConvert.DeserializeObject <Payload>(payloadString);
                // adaugam in storage
                PayloadStorage.Add(payload);
            }

            // Console.WriteLine(payloadString);
        }
Exemple #4
0
 public void DoSendMessageWork()
 {
     while (true)
     {
         while (!PayloadStorage.IsEmpty())
         {
             var payload = PayloadStorage.GetNext();
             if (payload != null)
             {
                 var connections = ConnectionStorage.GetConnectionsByTopic(payload.Topic);
                 foreach (var connection in connections)
                 {
                     var    payloadString = JsonConvert.SerializeObject(payload);
                     byte[] data          = Encoding.UTF8.GetBytes(payloadString);
                     connection.Socket.Send(data);
                 }
             }
         }
         Thread.Sleep(500);
     }
 }
Exemple #5
0
        private void ReceiveCallBack(IAsyncResult asyncResult)
        {
            ConnectionInfo connection = asyncResult.AsyncState as ConnectionInfo;

            try
            {
                Socket      senderSocket = connection.Socket;
                SocketError response;
                int         buffsize = senderSocket.EndReceive(asyncResult, out response);

                if (response == SocketError.Success)
                {
                    byte[] payload = new byte[buffsize];
                    Array.Copy(connection.Data, payload, payload.Length);


                    PayloadHandler.Handle(payload, connection);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Could not receive the data from the Broker !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                try
                {
                    connection.Socket.BeginReceive(connection.Data, 0, connection.Data.Length, SocketFlags.None, ReceiveCallBack, connection);
                }
                catch (Exception e)
                {
                    //MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    var address = connection.Socket.RemoteEndPoint.ToString();

                    ConnectionStorage.Remove(address);
                    connection.Socket.Close();
                }
            }
        }
Exemple #6
0
        private void RecieveCallback(IAsyncResult asyncResult)
        {
            ConnectionInfo connection = asyncResult.AsyncState as ConnectionInfo;

            try
            {
                Socket      senderSocket = connection.Socket;
                SocketError response;
                int         buffSize = senderSocket.EndReceive(asyncResult, out response);
                if (response == SocketError.Success)
                {
                    byte[] payload = new byte[buffSize];
                    Array.Copy(connection.Data, payload, payload.Length);
                    PayloadHandler.Handle(payload, connection);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Cant recieve  {e.Message}");
            }
            finally
            {
                try
                {
                    connection.Socket.BeginReceive(connection.Data, 0, connection.Data.Length, SocketFlags.None,
                                                   RecieveCallback, connection);
                }
                catch (Exception e) {
                    Console.WriteLine($"{e.Message}");
                    var address = connection.Socket.RemoteEndPoint.ToString();

                    ConnectionStorage.Remove(address);
                    connection.Socket.Close();
                }
            }
        }