Page 1 of 2 12 LastLast
Results 1 to 10 of 17
  1. #1
    Senior Member
    Join Date
    Sep 2007
    Location
    des plaines
    Posts
    41

    Send data back using LS

    It could have been explained before but I have to ask this again:
    Is it possbile to send some data back to the server (data adapter) from the client page?
    If yes, any samples available?

    Thanks for help.

  2. #2
    Administrator
    Join Date
    Jul 2006
    Location
    Milan, Italy
    Posts
    517
    Hi Mark,

    Currently you cannot talk directly to the Data Adapter from the client, but you can talk to the Metadata Adapter, through the sendMessage method. The Metadata Adapter will receive a call to notifyUserMessage. Then, the Metadata Adapter could talk to the Data Adapter.

    Consider that for enterprise applications, you will probably have a cluster of Lightstreamer Servers and you may want to leverage a server-side middleware (e.g. JMS) to dispatch messages to all your Data Adapters. In this case, you will probably deliver messages from the client to a typical web server component (e.g. a servlet), which will publish the data to the messaging bus. And the Data Adapters will listen to this bus.

  3. #3
    Senior Member
    Join Date
    Sep 2007
    Location
    des plaines
    Posts
    41
    Does that require Java backend?
    I am running .Net data Adapter though. Will it work then? If yes, could you please show some sample code?

    Thanks

  4. #4
    Administrator
    Join Date
    Jul 2006
    Location
    Milan
    Posts
    975
    The simple technique (i.e. sendMessage + notifyUserMessage + Metadata/Data Adapter communication) is also available with Remote .NET Data Adapters.
    You should code your Metadata Adapter as a Remote .NET Adapter too ("NotifyUserMessage" is still provided by the .NET library interface).
    Then you can have your Remote Metadata and Data Adapter talk to each other quite easily by loading them in the same Remote Server instance. This is shown in DOCS-SDKs\sdk_adapter_dotnet; see chapter 1.6 in doc\DotNet Adapters.pdf. The sample code shows loading both adapters, though communication between them is not covered.

    The full technique (i.e. an intermediate servlet and a message bus) is entirely played outside Lightstreamer. We use it in the PortfolioDemo; see http://www.lightstreamer.com/portfolioDemo.htm, where some raw code is available for the java case.

  5. #5
    Senior Member
    Join Date
    Sep 2007
    Location
    des plaines
    Posts
    41
    But isn't sendMessage a server side method?
    How am I triggering it from the client (Browser)?

    Thanks

  6. #6
    Administrator
    Join Date
    Jul 2006
    Location
    Milan
    Posts
    975
    No, sorry for the confusion; I have now fixed my previous post.
    sendMessage is provided by the Web Client Library as a method of the LightstreamerEngine object
    http://www.lightstreamer.com/docs/cl...ml#sendMessage
    A call to sendMessage by your client triggers, on the server side, the invocation of the notifyUserMessage method on your Metadata Adapter; this is supported both for java adapters and (as NotifyUserMessage) for remote .NET adapters.

  7. #7
    Senior Member
    Join Date
    Sep 2007
    Location
    des plaines
    Posts
    41
    How do I override notifyUserMessage to have my code there?

    Also here is a fragment of my push page:
    ls = "";
    page.onEngineCreation = function(lsEngine) {
    lsEngine.connection.setLSHost("UFD-SQL2008TEST.ufandd.local");
    lsEngine.connection.setLSPort(8080);
    lsEngine.context.setDebugAlertsOnClientError(debug Alerts);
    lsEngine.context.setRemoteAlertsOnClientError(remo teAlerts);

    lsEngine.connection.setAdapterName("PROXY_HELLOWOR LD");
    lsEngine.changeStatus("STREAMING");
    ls = lsEngine;
    }
    page.bind();
    page.createEngine("HelloWorldApp", "LS", "SHARE_SESSION");
    var pushtable = new NonVisualTable(["floorupdate"], ["scan"], "MERGE");
    page.addTable(pushtable, "hellotable");
    pushtable.onItemUpdate =
    function(itemPos, updateInfo, itemName)
    {
    // send completed scan to the front-end
    if (updateInfo.getNewValue(itemPos) != "")
    {
    serverData(updateInfo.getNewValue(itemPos));
    }
    };
    function sendMessage(message)
    {
    ls.sendMessage(message);
    }
    After fireing ls.sendMessage(message) LS console shows an error "unknown function" or something.
    Am I too far from what I am looking for (sending message back to server)?

    Thanks for your patience.

  8. #8
    Power Member
    Join Date
    Jul 2006
    Location
    Cesano Maderno, Italy
    Posts
    784
    hi,

    After fireing ls.sendMessage(message) LS console shows an error "unknown function" or something.
    Am I too far from what I am looking for (sending message back to server)?
    are you sure that you call the sendMessage method only once the ls object is initiated?
    The error you're receiving tells you that the object does not have such method and this make sense because before being a LightstreamerEngine instance your ls variable contains a string

    for a quick check try to start with a null ls variable. The error message should change.

    let me know if I'm wrong.

  9. #9
    Senior Member
    Join Date
    Sep 2007
    Location
    des plaines
    Posts
    41
    Ok, the exact message is:
    <INFO> Refused Request: Session error: Unsupported function from ipxxxx : xxxxport

    This is my function from the push page:
    function sendMessage(message)
    {
    debugger;
    ls.sendMessage(message);
    }
    and I am calling that function from Flex.

    When it goes into debug the ls is the LS Engine object. So, that''s not a problem.
    I think I need to do something on the server to make it work. Looks like it is the last piece of the puzzle to have my solution working.
    Here is my .net code:
    DataProviderServer server = new DataProviderServer();
    server.Adapter = new SocketToLightStreamer();

    MetadataProviderServer serverMeta = new MetadataProviderServer();
    serverMeta.Adapter = new Lightstreamer.Adapters.Metadata.LiteralBasedProvid er();

    TcpClient reqrepSocket = new TcpClient(host, reqrepPort);
    server.RequestStream = reqrepSocket.GetStream();
    server.ReplyStream = reqrepSocket.GetStream();

    TcpClient notifSocket = new TcpClient(host, notifPort);
    server.NotifyStream = notifSocket.GetStream();

    server.Start();

    I am trying to understand what you are suggesting about both data adapter and meta data adapter working together but still not sure how to do that.

    Thanks for your help.

  10. #10
    Administrator
    Join Date
    Jul 2006
    Location
    Milan
    Posts
    975
    Ok, sorry, the error was server side, on the LS console.
    The reported message is issued by the default Remote Metadata Adapter (i.e. the LiteralBasedProvider) upon a client message.
    In fact, there is no default implementation for NotifyUserMessage.
    You have to code a custom Remote Metadata Adapter and use it in place of the LiteralBasedProvider (you can, however, inherit from LiteralBasedProvider).
    There, you can put your own implementation for NotifyUserMessage.
    (I had to correct again some previous posts; in the .NET interface, the method name starts with a capital letter).

    As said in a previous post, your Remote Metadata Adapter should then communicate with your Remote Data Adapter. The best way to achieve this is to run both adapters in the same process. There is no direct support for this, but the provided "StandaloneLauncher.cs" shows an example of a program doing this by leveraging the Lightstreamer.DotNet.Server interface.

 

 

Similar Threads

  1. Don't send message when refresh the browser
    By naitsir in forum Client APIs
    Replies: 7
    Last Post: October 2nd, 2012, 11:36 AM
  2. How to send message to each client?
    By hungtt in forum Adapter APIs
    Replies: 7
    Last Post: December 30th, 2010, 04:42 AM
  3. Replies: 9
    Last Post: October 19th, 2009, 05:02 PM
  4. How to send params from client to server
    By kanibal210 in forum Client APIs
    Replies: 1
    Last Post: September 30th, 2009, 09:36 AM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
All times are GMT +1. The time now is 11:25 AM.