Dart Documentationobjectory_server_implObjectoryClient

ObjectoryClient class

class ObjectoryClient {
 Db db;
 int token;
 WebSocket socket;
 String oauthClientId;
 bool authenticated = false;
 bool closed = false;
 ObjectoryClient(this.token, this.socket, this.db) {
   socket.done.catchError((e) {closed = true;});
   socket.listen((message) {
     try {
       var binary = new BsonBinary.from(JSON.decode(message));
       var jdata = new BSON().deserialize(binary);
       var header = new RequestHeader.fromMap(jdata['header']);
       Map content = jdata['content'];
       Map extParams = jdata['extParams'];
       if (oauthClientId != null && !authenticated) {
         if (header.command == 'authenticate') {
           authenticate(header,content);
           return;
         } else {
           _log.shout('Unexpected first message: $message in oauthMode. Closing connection');
           socket.close();
         }
       }
       if (header.command == "insert") {
         save(header,content);
         return;
       }
       if (header.command == "update") {
         save(header,content,extParams);
         return;
       }
       if (header.command == "remove") {
         remove(header,content);
         return;
       }
       if (header.command == "findOne") {
         findOne(header, content, extParams);
         return;
       }
       if (header.command == "count") {
         count(header, content, extParams);
         return;
       }
       if (header.command == "find") {
         find(header, content, extParams);
         return;
       }
       if (header.command == "queryDb") {
         queryDb(header,content);
         return;
       }
       if (header.command == "dropDb") {
         dropDb(header);
         return;
       }
       if (header.command == "dropCollection") {
         dropCollection(header);
         return;
       }
       _log.shout('Unexpected message: $message');
       sendResult(header,content);
     } catch (e) {
       _log.severe(e);
     }
   },
     onDone: () {
       closed = true;
       socket.close();
     },
     onError: (error) {
       _log.severe(error.toString());
       socket.close();
     }  
   
  );
 }
 sendResult(RequestHeader header, content) {
   if (closed) {
     _log.warning('WARNING: trying send on closed connection. token:$token $header, $content');
   } else {
     _log.fine('token:$token sendResult($header, $content) ');
     sendMessage(header.toMap(),content);      
   }
 }
 sendMessage(header, content) {
   socket.add(JSON.encode(new BSON().serialize({'header': header,'content': content}).byteList));
 }
 save(RequestHeader header, Map mapToSave, [Map idMap]) {
   if (header.command == 'insert') {
     db.collection(header.collection).insert(mapToSave).then((responseData) {
       sendResult(header, responseData);
     });
   }
   else
   {
     ObjectId id = mapToSave['_id'];
     if (id != null) {
       db.collection(header.collection).update({'_id': id},mapToSave).then((responseData) {
         sendResult(header, responseData);
       });
     }
     else {
       if (idMap != null) {
         db.collection(header.collection).update(idMap,mapToSave).then((responseData) {
           sendResult(header, responseData);
         });
       } else {
         _log.shout('ERROR: Trying to update object without ObjectId set. $header, $mapToSave');
         }  
     }
   }
 }
 SelectorBuilder _selectorBuilder(Map selector, Map extParams) {
   SelectorBuilder selectorBuilder = new SelectorBuilder();
   selectorBuilder.map = selector;
   selectorBuilder.paramLimit = extParams['limit'];
   selectorBuilder.paramSkip = extParams['skip'];
   return selectorBuilder;
 }
 
 find(RequestHeader header, Map selector, Map extParams) {
   _log.fine('find $header $selector $extParams');
   db.collection(header.collection).find(_selectorBuilder(selector,extParams)).toList().
   then((responseData) {
     sendResult(header, responseData);
   });
 }

 remove(RequestHeader header, Map selector) {
   db.collection(header.collection).remove(selector)
     .then((responseData) {
       sendResult(header, responseData);
   });
 }

 findOne(RequestHeader header, Map selector , Map extParams) {
   db.collection(header.collection).findOne(_selectorBuilder(selector,extParams)).
   then((responseData) {
     sendResult(header, responseData);
   });
 }
 authenticate(RequestHeader header, Map selector) {
   String tokenData = selector['tokenData'];
   Map token;
   HttpClient client = new HttpClient();
   client.getUrl(Uri.parse("https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6ZSUBWMUd2UfutTyvgqf5CXw3vVAc-sbzogKu-3iHw"))
     .then((HttpClientRequest request) {
       return request.close();
     }).then((HttpClientResponse response) {
         return response.transform(UTF8.decoder).toList();
     }).then((data) {
         client.close();
         token = JSON.decode(data.join(''));
         if (token['issued_to'] != oauthClientId) {
           _log.shout('Invalid oauth token. Closing connection');
           socket.close();
         } else {
           return db.collection(header.collection).findOne(where.eq('email',token['email']))
           .then((responseData) {
             if (responseData == null) {
               _log.shout('Not found email ${token['email']} in collection ${header.collection}. Closing connection');
               socket.close();                
             } else {
               authenticated = true;
               sendResult(header, responseData);
             }
           });
         }
     }).catchError((_){
       _log.shout('Authentification error. Closing connection');
       socket.close();             
     });
 }

 count(RequestHeader header, Map selector , Map extParams) {
   db.collection(header.collection).count(_selectorBuilder(selector,extParams)).
   then((responseData) {
     sendResult(header, responseData);
   });
 }
 queryDb(RequestHeader header,Map query) {
   db.executeDbCommand(DbCommand.createQueryDBCommand(db,query))
   .then((responseData) {
     sendResult(header,responseData);
   });
 }
 dropDb(RequestHeader header) {
   db.drop()
   .then((responseData) {
     sendResult(header,responseData);
   });
 }

 dropCollection(RequestHeader header) {
   db.dropCollection(header.collection)
   .then((responseData) {
     sendResult(header,responseData);
   });
 }


 protocolError(String errorMessage) {
   _log.shout('PROTOCOL ERROR: $errorMessage');
 }


 String toString() {
   return "ObjectoryClient_${token}";
 }
}

Constructors

new ObjectoryClient(int token, WebSocket socket, Db db) #

Creates a new Object instance.

Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.

docs inherited from Object
ObjectoryClient(this.token, this.socket, this.db) {
 socket.done.catchError((e) {closed = true;});
 socket.listen((message) {
   try {
     var binary = new BsonBinary.from(JSON.decode(message));
     var jdata = new BSON().deserialize(binary);
     var header = new RequestHeader.fromMap(jdata['header']);
     Map content = jdata['content'];
     Map extParams = jdata['extParams'];
     if (oauthClientId != null && !authenticated) {
       if (header.command == 'authenticate') {
         authenticate(header,content);
         return;
       } else {
         _log.shout('Unexpected first message: $message in oauthMode. Closing connection');
         socket.close();
       }
     }
     if (header.command == "insert") {
       save(header,content);
       return;
     }
     if (header.command == "update") {
       save(header,content,extParams);
       return;
     }
     if (header.command == "remove") {
       remove(header,content);
       return;
     }
     if (header.command == "findOne") {
       findOne(header, content, extParams);
       return;
     }
     if (header.command == "count") {
       count(header, content, extParams);
       return;
     }
     if (header.command == "find") {
       find(header, content, extParams);
       return;
     }
     if (header.command == "queryDb") {
       queryDb(header,content);
       return;
     }
     if (header.command == "dropDb") {
       dropDb(header);
       return;
     }
     if (header.command == "dropCollection") {
       dropCollection(header);
       return;
     }
     _log.shout('Unexpected message: $message');
     sendResult(header,content);
   } catch (e) {
     _log.severe(e);
   }
 },
   onDone: () {
     closed = true;
     socket.close();
   },
   onError: (error) {
     _log.severe(error.toString());
     socket.close();
   }  
 
);
}

Properties

bool authenticated #

bool authenticated = false

bool closed #

bool closed = false

Db db #

Db db

String oauthClientId #

String oauthClientId

WebSocket socket #

WebSocket socket

int token #

int token

Methods

dynamic authenticate(RequestHeader header, Map selector) #

authenticate(RequestHeader header, Map selector) {
 String tokenData = selector['tokenData'];
 Map token;
 HttpClient client = new HttpClient();
 client.getUrl(Uri.parse("https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6ZSUBWMUd2UfutTyvgqf5CXw3vVAc-sbzogKu-3iHw"))
   .then((HttpClientRequest request) {
     return request.close();
   }).then((HttpClientResponse response) {
       return response.transform(UTF8.decoder).toList();
   }).then((data) {
       client.close();
       token = JSON.decode(data.join(''));
       if (token['issued_to'] != oauthClientId) {
         _log.shout('Invalid oauth token. Closing connection');
         socket.close();
       } else {
         return db.collection(header.collection).findOne(where.eq('email',token['email']))
         .then((responseData) {
           if (responseData == null) {
             _log.shout('Not found email ${token['email']} in collection ${header.collection}. Closing connection');
             socket.close();                
           } else {
             authenticated = true;
             sendResult(header, responseData);
           }
         });
       }
   }).catchError((_){
     _log.shout('Authentification error. Closing connection');
     socket.close();             
   });
}

dynamic count(RequestHeader header, Map selector, Map extParams) #

count(RequestHeader header, Map selector , Map extParams) {
 db.collection(header.collection).count(_selectorBuilder(selector,extParams)).
 then((responseData) {
   sendResult(header, responseData);
 });
}

dynamic dropCollection(RequestHeader header) #

dropCollection(RequestHeader header) {
 db.dropCollection(header.collection)
 .then((responseData) {
   sendResult(header,responseData);
 });
}

dynamic dropDb(RequestHeader header) #

dropDb(RequestHeader header) {
 db.drop()
 .then((responseData) {
   sendResult(header,responseData);
 });
}

dynamic find(RequestHeader header, Map selector, Map extParams) #

find(RequestHeader header, Map selector, Map extParams) {
 _log.fine('find $header $selector $extParams');
 db.collection(header.collection).find(_selectorBuilder(selector,extParams)).toList().
 then((responseData) {
   sendResult(header, responseData);
 });
}

dynamic findOne(RequestHeader header, Map selector, Map extParams) #

findOne(RequestHeader header, Map selector , Map extParams) {
 db.collection(header.collection).findOne(_selectorBuilder(selector,extParams)).
 then((responseData) {
   sendResult(header, responseData);
 });
}

dynamic protocolError(String errorMessage) #

protocolError(String errorMessage) {
 _log.shout('PROTOCOL ERROR: $errorMessage');
}

dynamic queryDb(RequestHeader header, Map query) #

queryDb(RequestHeader header,Map query) {
 db.executeDbCommand(DbCommand.createQueryDBCommand(db,query))
 .then((responseData) {
   sendResult(header,responseData);
 });
}

dynamic remove(RequestHeader header, Map selector) #

remove(RequestHeader header, Map selector) {
 db.collection(header.collection).remove(selector)
   .then((responseData) {
     sendResult(header, responseData);
 });
}

dynamic save(RequestHeader header, Map mapToSave, [Map idMap]) #

save(RequestHeader header, Map mapToSave, [Map idMap]) {
 if (header.command == 'insert') {
   db.collection(header.collection).insert(mapToSave).then((responseData) {
     sendResult(header, responseData);
   });
 }
 else
 {
   ObjectId id = mapToSave['_id'];
   if (id != null) {
     db.collection(header.collection).update({'_id': id},mapToSave).then((responseData) {
       sendResult(header, responseData);
     });
   }
   else {
     if (idMap != null) {
       db.collection(header.collection).update(idMap,mapToSave).then((responseData) {
         sendResult(header, responseData);
       });
     } else {
       _log.shout('ERROR: Trying to update object without ObjectId set. $header, $mapToSave');
       }  
   }
 }
}

dynamic sendMessage(header, content) #

sendMessage(header, content) {
 socket.add(JSON.encode(new BSON().serialize({'header': header,'content': content}).byteList));
}

dynamic sendResult(RequestHeader header, content) #

sendResult(RequestHeader header, content) {
 if (closed) {
   _log.warning('WARNING: trying send on closed connection. token:$token $header, $content');
 } else {
   _log.fine('token:$token sendResult($header, $content) ');
   sendMessage(header.toMap(),content);      
 }
}

String toString() #

Returns a string representation of this object.

docs inherited from Object
String toString() {
 return "ObjectoryClient_${token}";
}