Hi Thomas,
When you create a new remote server instance it is possible to give an instance 
variable to you local client factory via the "factory_thisx" parameter; see 
following function signature:

etch_status_t test_helper_remote_server_create (test _remote_server** 
remote_server, wchar_t* uri, void* factory_thisx, main_client_create_func 
client_create);

When you connection to you server is established, the <client_create> function 
is called and the parameters factory_thisx and sever forwarded to it. Now it is 
possible to save the factory_thisx into your test_client_impl instance (will be 
created in the factory callback function client_create). You could do this etc. 
by adding a new variable to the test_client_impl struct.

Now when you receive a client directed call, you can take the thisx pointer to 
get you custom instance like youVar inst = (test_client_impl(thisx))->youVar; 
For each connection you should have a own test_client_impl instance with custom 
data.

The same is for the onSessionNotify function 
(client->iobjsession->_session_notify = onSessionNotify;). You should set the 
function pointer to the test_client_impl instance in the <client_create> 
function. After that it is possible to retrieve you custom pointer via 
(test_client_impl*)thisx)->youVar.

Hope this helps!

Thanks
Michael

-----Ursprüngliche Nachricht-----
Von: Thomas Marsh [mailto:[email protected]] 
Gesendet: Donnerstag, 5. Januar 2012 01:08
An: [email protected]
Betreff: Identification of remote server in impl

Hello all,

I noticed an issue when I was implementing a client directed message. If I have 
multiple <interface>_remote_server references, and I receive a client directed 
service method call from one of them, I cannot tell which connection it is 
coming from. For example, (pseudocode)

Step 1: from client connect to multiple remote servers

test_remote_server* T1 = NULL;
test_remote_server* T2 = NULL;

test_helper_remote_server_create(&T1, uri1, .);   // T1 = 0x87c5b90
test_helper_remote_server_create(&T2, uri2, .);   // T2 = 0x9647b90

test_helper_remote_server_start_wait(&T1, 4000); 
test_helper_remote_server_start_wait(&T2, 4000);


Step 2: server sends a client directed message

test_remote_client* foo = ..;

client->testfunc(client);


Step 3: client receives message

void *testfunc(void* thisx) {
                // thisx is a test_remote_server instance printf("thisx=%p\n", 
thisx); //prints something unexpected, like 0x9951b90
        }

The problem is that this is neither of the known remote_server instances I 
created, and there is no variable (like server_id) which is set so that I can 
make a correlation. The same issue is true of sessionNotify events.

Am I missing something, or doing something incorrectly? If it is an issue, 
please let me know and I will submit a JIRA issue.

Thanks, and guten Rutsch ins neue Jahr!

--thomas
--
Thomas Marsh | Sr. Software Engineer | Cloud Gaming Division | GameStop | 
512-343-5927

Reply via email to