Browse Source

MWsession class. Now it's compiling

0.2
Pedro Berrocal 5 years ago
parent
commit
9c009afb6d
4 changed files with 66 additions and 16 deletions
  1. +1
    -1
      src/MW.ice
  2. +11
    -11
      src/MWMap.cpp
  3. +1
    -1
      src/MWMap.h
  4. +53
    -3
      src/MWSessionI.cpp

+ 1
- 1
src/MW.ice View File

@ -6,7 +6,7 @@ module MW
{
interface MWCallback
{
void status(string s);
void message(string s);
}
interface MWSession extends Glacier2::Session


+ 11
- 11
src/MWMap.cpp View File

@ -9,8 +9,8 @@ using namespace MW;
MWMap*
MWMap::instance()
{
static mwMap mwMapInstance;
return &mwMap Instance;
static MWMap mwMapInstance;
return &mwMapInstance;
}
void
@ -18,7 +18,7 @@ MWMap::enter(const shared_ptr<MWSessionPrx>& session, const shared_ptr<MWCallbac
const Ice::Current& current)
{
lock_guard<mutex> sync(_mutex);
_callback.push_back(callback);
_callbacks.push_back(callback);
auto p = _connectionMap.find(current.con);
if (p == _connectionMap.end())
@ -33,9 +33,9 @@ MWMap::enter(const shared_ptr<MWSessionPrx>& session, const shared_ptr<MWCallbac
current.con->setCloseCallback([this](const shared_ptr<Ice::Connection>& con)
{
deadRouter(con);
)};
deadRouter(con);
});
}
else
{
@ -48,9 +48,9 @@ MWMap::enter(const shared_ptr<MWSessionPrx>& session, const shared_ptr<MWCallbac
void
MWMap::leave(const shared_ptr<MWCallbackPrx>& callback, const Ice::Current& current)
{
lock_guard(mutex) sync(_mutex);
_callbacks.remove_if([&callback](const shared_ptr<MWCallbackPrx>& cb) { return Ice::proxyIdentifyEqual(callback, cb); });
_connectionMap[current.con].remove_if([&current](const share_ptr<MWSessionPrx>& s) {return current.id == s->ice_getIdentity(); });
lock_guard<mutex> sync(_mutex);
_callbacks.remove_if([&callback](const shared_ptr<MWCallbackPrx>& cb) { return Ice::proxyIdentityEqual(callback, cb); });
_connectionMap[current.con].remove_if([&current](const shared_ptr<MWSessionPrx>& s) {return current.id == s->ice_getIdentity(); });
}
void
@ -64,11 +64,11 @@ MWMap::message(const string& data) const
}
void
MWMap::dearRouter()
MWMap::deadRouter(const shared_ptr<Ice::Connection>& con)
{
cout << "Detected dead router. Detroying all sessions " << endl;
list<shared_ptr<MWSessionPrx>> sessions;
lock_guar<mutex> sync(_mutex);
lock_guard<mutex> sync(_mutex);
auto p = _connectionMap.find(con);
if(p != _connectionMap.end())
{


+ 1
- 1
src/MWMap.h View File

@ -16,7 +16,7 @@ class MWMap
{
public:
static mwMap* instance();
static MWMap* instance();
void enter(const shared_ptr<MWSessionPrx>&, const shared_ptr<MWCallbackPrx>&, const Ice::Current&);
void leave(const shared_ptr<MWCallbackPrx>&, const Ice::Current&);


+ 53
- 3
src/MWSessionI.cpp View File

@ -1,22 +1,72 @@
#include <Ice/Ice.h>
#include <MWSessionI.h>
#include <list>
#include <MWMap.h>
using namespace std;
using namespace MW;
MWSessionI::ChatSessionI(const string& userId) :
//
// MWSessionI
//
MWSessionI::MWSessionI(const string& userId) :
_userId(userId)
{
}
void
MWSessionCallback::setCallback(shared_ptr<MWCallbackPrx>, const Ice::Current& current)
MWSessionI::setCallback(shared_ptr<MWCallbackPrx> callback, const Ice::Current& current)
{
lock_guard<mutex> sync(mutex);
if(!_callback)
{
_callback = callback
_callback = callback;
auto mwMap = MWMap::instance();
// mwMap->message(_userId + " has enter the map");
mwMap->enter(Ice::uncheckedCast<MWSessionPrx>(current.adapter->createProxy(current.id)), callback, current);
}
}
void
MWSessionI::sendPosition(string data, const Ice::Current&)
{
lock_guard<mutex> sync(_mutex);
MWMap::instance()->message(_userId + " " + data);
}
void
MWSessionI::destroy(const Ice::Current& current)
{
cout << "Destrying session for " << _userId << endl;
lock_guard<mutex> sync(_mutex);
if (_callback)
{
auto mwMap = MWMap::instance();
mwMap->leave(_callback, current);
_callback = nullptr;
mwMap->message(_userId + " left the Map");
}
current.adapter->remove(current.id);
}
//
// MWSessionManagerI
//
shared_ptr<Glacier2::SessionPrx>
MWSessionManagerI::create(string userId, shared_ptr<Glacier2::SessionControlPrx>, const Ice::Current& current)
{
Ice::Identity ident = { Ice::generateUUID(), "sesion"};
return Ice::uncheckedCast<Glacier2::SessionPrx>(current.adapter->add(make_shared<MWSessionI>(userId), ident));
}
void
MWSessionManagerI::destroy()
{
MWMap::instance()->destroy();
}

Loading…
Cancel
Save