Browse Source

single threaded implementation

PYADPT-55
Volker Birk 9 years ago
parent
commit
11b3b1b5ff
  1. 25
      src/sync_mixin.cc
  2. 7
      src/sync_mixin.hh

25
src/sync_mixin.cc

@ -10,7 +10,7 @@ namespace pEp {
SyncMixIn::SyncMixIn()
{
PEP_STATUS status = register_sync_callbacks(session, (void *) this,
_messageToSend, _showHandshake);
_messageToSend, _showHandshake, NULL, NULL);
assert(status == PEP_STATUS_OK);
}
@ -62,6 +62,29 @@ namespace pEp {
}
#endif
int SyncMixIn::inject_sync_msg(void *msg, void *management)
{
SyncMixIn *that = (SyncMixIn *) management;
val = 0;
that->_msg = msg;
setjmp(that->env);
if (!that->val)
do_sync_protocol(session, management);
return 0;
}
void *SyncMixIn::retrieve_next_sync_msg(void *management)
{
static int twice = 1;
twice = !twice;
SyncMixIn *that = (SyncMixIn *) management;
if (!twice)
return (void *) that->_msg;
longjmp(that->env, 1);
return (void *) 23;
}
void SyncMixIn_callback::_messageToSend(Message msg)
{
call_method< void >(_self, "messageToSend", msg);

7
src/sync_mixin.hh

@ -1,6 +1,7 @@
#pragma once
#include "pEpmodule.hh"
#include <setjmp.h>
namespace pEp {
namespace PythonAdapter {
@ -26,6 +27,12 @@ namespace pEp {
static PEP_STATUS _messageToSend(void *obj, message *msg);
static PEP_STATUS _showHandshake(void *obj,
pEp_identity *me, pEp_identity *partner);
static jmp_buf env;
static int val;
static void *_msg;
static int inject_sync_msg(void *msg, void *management);
static void *retrieve_next_sync_msg(void *management);
};
class SyncMixIn_callback : public SyncMixIn {

Loading…
Cancel
Save