Search This Blog

Tuesday, February 12, 2013

Eneter Messaging Framework 5.0

Summary: Brief overview about Eneter 5.0 functionality.

I would like to announce Eneter 5.0 is released.

Eneter is a lightweight library for the interprocess communication. It is easy to use and it works across various platforms.

The idea of the framework is to provide components that can be combined to create desired communication scenarios.

The framework is free for non-commercial use and can be downloaded from:
http://www.eneter.net/ProductDownload.htm


Here is a brief overview about Eneter Messaging Framework 5.0.

Supported Platforms

  • Java 6
  • Android 2.1 (or later)
  • .NET 3.5, .NET 4.0, .NET 4.5
  • Windows Phone 7, Windows Phone 7.1
  • Silverlight 3, Silverlight 4, Silverlight 5
  • Mono 2.6.4
Online help for Java and Android.
Online help for .NET platforms and Mono.

Protocols and Transportation Mechanisms

  • TCP - for communication between processes running on different machines.
  • WebSocket - for communication between processes running on different machines. It provides bi-directional, full-duplex communication in environments which block non-standard Internet connections using a firewall.
  • HTTP - for communication between processes running on different machines. It works in environments blocking non-standard Internet connections using a firewall.
  • Shared Memory - for very fast communication between processes running on the same machine.
  • Named Pipes - for communication between processes running on the same machine.
  • Silverlight Messaging - for communication between Silverlight applications.
  • Android USB Cable - for communication between computer and Android device connected via the USB cable.Eneter.
  • Thread Messaging - for communication between threads running in the same process

Message Serialization

  • XmlStringSerializer - serialization to XML (works for the communication between .NET and Java).
  • DataContractXmlStringSerializer - serialization to XML using DataContract and DataMember attributes.
  • DataContractJsonStringSerializer - serialization to JSON using DataContract and DataMember attributes.
  • BinarySerializer - for fast serialization using the binary format (does not work for the communication between .NET and Java).
  • AesSerializer - for encrypting using Advanced Encryption Standard (works for the communication between .NET and Java).
  • RijndaelSerializer - for encrypting using Rijndael algorithm.
  • GZipSerializer - for compressing big messages before sending across the network (works for the communication between .NET and Java).
  • RsaSerializer - for encrypting messages by RSA algorithm using public and private keys (works for the communication between .NET and Java).
  • RsaDigitalSignatureSerializer - for using digital signature to verify who sent the message and that the message was not changed (works for the communication between .NET and Java).

The communication API is not bound to a particular protocol or serialization mechanism. Therefore your implementation is same, does not matter what you use.

Sending-Receiving Messages

To implement the communication between applications, the framework provides functionality to send and receive messages. Communication can be one-way or request-response and messages can be:
  • String Messages - for sending and receiving text messages.
  • Typed Messages - for sending and receiving data structures of specified types (strongly typed messages)

Routing Messages

It provides components that can be placed on the communication path to control the routing behavior.
  • Broker - for publish-subscribe scenarios (publisher sends messages to the broker and the broker notifies all subscribers).
  • Dispatcher - for routing messages to all connected receivers (e.g. for a service listening to TCP and HTTP at the same time).
  • Router - for routing messages to preconfigured addresses.
  • Channel Wrapper/Unwrapper - for a server application providing multiple services on one address.
  • Load Balancer - for distributing workload across more computers (or processes).

Reliability

The communication across the network is typically less reliable as a local call inside a process. The network connection can be interrupted or a receiving application can be temporarily unavailable. If your communication scenario requires overcome these issues, the framework provides:
  • Monitoring of connection availability - for early detection of a disconnection.
  • Buffered messaging and automatic reconnect - for overcoming short disconnections (e.g. in case of unstable network).
  • Acknowledged messaging - to be notified whether a message was delivered or not.

Security

The communication across the network is easy to observe and confidential data can be acquired by unauthorized persons. Therefore, you may want to protect your data and verify the identity:
  • Communication via SSL.
  • Encrypting your messages using symetric AES with AesSerializer.
  • Encrypting your messages using RSA (public-private key encryption) with RsaSerializer.
  • Digitally signing of messages with RsaDigitalSignatureSerializer.



8 comments:

  1. Will there be support for iOS Devices?

    ReplyDelete
    Replies
    1. The cross-platform is one of attributes of the framework. Therefore we would like to provide it for iOS too. However right now I am not able to give any dates when it will be.

      Delete
  2. My code developed using eneter framework works fine with loop back IP address but does not work with real IP address I.e 192.168.1.100 is shown as IP address on my android phone and 192.168.1.105 is the IP address on my PC . I am using pro net wifi router. Do I need to root my android phone so that it can communicate with my c# application?

    ReplyDelete
    Replies
    1. If I understand correctly you would like to connect your Android with PC which has the IP address 192.168.1.105.
      If it is so then both Android and PC must use this IP address. I.e. your PC application listens e.g. tcp://192.168.1.105:8023/ and your Android application opens the connection to tcp://192.168.1.105:8023/.

      The common mistake is that PC listens to 127.0.0.1 and Android connects 192.168.1.105.

      Delete
  3. how to use tcp://192.168.1.105:8023/ in html5 javascript
    my error is tcp not allowed, need ws or wss

    ReplyDelete
  4. I have problem with connection between Android (Tablet) and .NET Compact Framework (Device). Both Android app and CF3.5 connect to test server on desktop, but when I want to set server on CF3.5 and send request from Android application send nothing java.lang.IllegalStateException: DefaultDuplexOutputChannel 'tcp://192.168.1.230:8094' cannot send the message when not connected. I'm using IDuplexTypedMessageSender for tests. Any suggestions what am I doing wrong?

    ReplyDelete
    Replies
    1. If I understand correctly everything is fine while the service application is running on the desktop. But when you try to make your Compact Framework the service then when your Android sends a message you get the exception:

      java.lang.IllegalStateException: DefaultDuplexOutputChannel 'tcp://192.168.1.230:8094' cannot send the message when not connected.

      If it is so then it looks the Android device failed to connect the CF device.
      Here are several hints:
      • please check the CF starts listening on the correct IP address. E.g. you cannot start listening using 127.0.0.1 in CF. Then if the client connects 192.168.1.230 it will not work. (Service must start listening using the same IP address.)
      • please chek 192.168.1.230 is really the IP address assigned to the CF device in the network.
      • you can activate writing error traces into the file. Put the following line at the beginning of your CF application:
      EneterTrace.TraceLog = new StreamWriter("tracefile.txt");
      and you can use similar in Java too:
      EneterTrace.setTraceLog(new PrintStream("D:\\Trace.txt"));
      Then you can see more details what is happening.

      In case of further questions, please feel free to contact me via e-mail. I will try to support you.

      Delete
  5. Hi,
    I have created an android app and the .NET app for the communication,
    I am successfully able to connect to each of them, how ever when ever i am trying to send a message i receive a NULL at the .NET app.

    Thanks in Advance

    ReplyDelete