![]() |
RTBKit
0.9
Open-source framework to create real-time ad bidding systems.
|
00001 /* banker_js.cc 00002 Jeremy Barnes, 6 April 2011 00003 Copyright (c) 2011 Datacratic. All rights reserved. 00004 00005 Banker JS interface. 00006 */ 00007 00008 00009 #include "banker_js.h" 00010 #include "soa/js/js_wrapped.h" 00011 #include "jml/utils/smart_ptr_utils.h" 00012 #include "rtbkit/core/banker/null_banker.h" 00013 00014 using namespace std; 00015 using namespace v8; 00016 using namespace node; 00017 using namespace RTBKIT; 00018 00019 namespace Datacratic { 00020 namespace JS { 00021 00022 00023 /*****************************************************************************/ 00024 /* BANKER JS */ 00025 /*****************************************************************************/ 00026 00027 const char * BankerName = "Banker"; 00028 00029 struct BankerJS 00030 : public JSWrapped2<Banker, BankerJS, BankerName, rtbModule> { 00031 00032 BankerJS(v8::Handle<v8::Object> This, 00033 const std::shared_ptr<Banker> & as 00034 = std::shared_ptr<Banker>()) 00035 { 00036 HandleScope scope; 00037 wrap(This, as); 00038 } 00039 00040 BankerJS() 00041 { 00042 } 00043 00044 static Handle<v8::Value> 00045 New(const Arguments & args) 00046 { 00047 try { 00048 new BankerJS(args.This()); 00049 return args.This(); 00050 } HANDLE_JS_EXCEPTIONS; 00051 } 00052 00053 static void 00054 Initialize() 00055 { 00056 Persistent<FunctionTemplate> t = Register(New); 00057 00058 //registerMemberFn(&Banker::addBudgetSync, "addBudget"); 00059 //registerMemberFn(&Banker::setBudgetSync, "setBudget"); 00060 //registerMemberFn(&Banker::authorizeBid, "authorizeBid"); 00061 //registerMemberFn(&Banker::cancelBid, "cancelBid"); 00062 //registerMemberFn(&Banker::winBid, "winBid"); 00063 00064 //registerMemberFn(&Banker::getCampaignStatusJson, "getCampaignStatus"); 00065 //registerMemberFn(&Banker::dumpAllCampaignsJson, "dumpAllCampaigns"); 00066 } 00067 00068 }; 00069 00070 void to_js(JS::JSValue & value, const std::shared_ptr<Banker> & as) 00071 { 00072 value = BankerJS::toJS(as); 00073 } 00074 00075 std::shared_ptr<Banker> 00076 from_js(const JSValue & value, std::shared_ptr<Banker> *) 00077 { 00078 return BankerJS::fromJS(value); 00079 } 00080 00081 Banker * 00082 from_js(const JSValue & value, Banker **) 00083 { 00084 return BankerJS::fromJS(value).get(); 00085 } 00086 00087 00088 /*****************************************************************************/ 00089 /* NULL BANKER JS */ 00090 /*****************************************************************************/ 00091 00092 const char * NullBankerName = "NullBanker"; 00093 00094 struct NullBankerJS 00095 : public JSWrapped3<NullBanker, 00096 NullBankerJS, 00097 BankerJS, 00098 NullBankerName, rtbModule, true> { 00099 00100 NullBankerJS() 00101 { 00102 } 00103 00104 NullBankerJS(const v8::Handle<v8::Object> & This, 00105 const std::shared_ptr<NullBanker> & data 00106 = std::shared_ptr<NullBanker>()) 00107 { 00108 wrap(This, data); 00109 } 00110 00111 static Handle<v8::Value> 00112 New(const Arguments & args) 00113 { 00114 try { 00115 new NullBankerJS 00116 (args.This(), 00117 std::shared_ptr<NullBanker>(new NullBanker(getArg(args, 0, false, "authorize")))); 00118 return args.This(); 00119 } HANDLE_JS_EXCEPTIONS; 00120 } 00121 00122 static void Initialize() 00123 { 00124 Persistent<FunctionTemplate> t = Register(New); 00125 registerRWProperty(&NullBanker::authorize_, "authorize", 00126 v8::DontDelete); 00127 } 00128 }; 00129 00130 std::shared_ptr<NullBanker> 00131 from_js(const JSValue & value, std::shared_ptr<NullBanker> *) 00132 { 00133 return NullBankerJS::fromJS(value); 00134 } 00135 00136 NullBanker * 00137 from_js(const JSValue & value, NullBanker **) 00138 { 00139 return NullBankerJS::fromJS(value).get(); 00140 } 00141 00142 NullBanker & 00143 from_js(const JSValue & value, NullBanker *) 00144 { 00145 return *NullBankerJS::fromJS(value).get(); 00146 } 00147 00148 void 00149 to_js(JSValue & value, const std::shared_ptr<NullBanker> & fset) 00150 { 00151 value = registry.getWrapper(fset); 00152 } 00153 00154 00155 } // namespace JS 00156 } // namespace Datacratic