এটি হল gdbus-codegen কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
gdbus-codegen - D-Bus কোড এবং ডকুমেন্টেশন জেনারেটর
সাইনোপিসিস
gdbus-codegen [-h, --help] [--ইন্টারফেস-উপসর্গ org.project.Prefix]
[--জেনারেট-সি-কোড আউটফাইলস] [--c-নামস্থান আপনার প্রকল্প]
[--c-জেনারেট-অবজেক্ট-ম্যানেজার] [--জেনারেট-ডকবুক আউটফাইলস]
[--xml-ফাইল ফাইল] [--টীকা এলিমেন্ট চাবি VALUE না]... ফাইল [ফাইল...]
বর্ণনাঃ
gdbus-codegen এক বা একাধিক ডি-বাসের জন্য কোড এবং/অথবা ডকুমেন্টেশন তৈরি করতে ব্যবহৃত হয়
ইন্টারফেস টুলটি পড়ে ডি-বাস অন্তর্দর্শন এক্সএমএল[1] ফাইল এবং আউটপুট ফাইল তৈরি করে।
টুলটি বর্তমানে সি কোড তৈরি করা সমর্থন করে (এর মাধ্যমে --জেনারেট-সি-কোড) এবং ডকবুক এক্সএমএল (এর মাধ্যমে
--জেনারেট-ডকবুক).
জেনারেটিং C কোড
C কোড তৈরি করার সময়, প্রতিটি D-Bus ইন্টারফেসের জন্য একটি #GInterface-derived টাইপ তৈরি করা হয়।
উপরন্তু, প্রতিটি উত্পন্ন ধরনের জন্য, FOOBAR, দুটি কংক্রিট তাত্ক্ষণিক প্রকার,
FooBarProxy এবং FooBarSkeleton, বাস্তবায়িত ইন্টারফেসও তৈরি করা হয়। সাবেক
#GDBusProxy থেকে প্রাপ্ত এবং ক্লায়েন্ট সাইডে ব্যবহারের জন্য উদ্দিষ্ট যখন পরেরটি
#GDBusInterfaceSkeleton টাইপ থেকে প্রাপ্ত যা a-এ রপ্তানি করা সহজ করে তোলে
#GDBusConnection হয় সরাসরি বা #GDBusObjectManagerServer উদাহরণের মাধ্যমে।
প্রতিটি জেনারেট করা C টাইপের নাম D-Bus ইন্টারফেস নাম থেকে নেওয়া হয়েছে
সঙ্গে দেওয়া উপসর্গ --ইন্টারফেস-উপসর্গ এবং বিন্দু সরানো এবং প্রাথমিক অক্ষর সহ
মূলধন উদাহরণস্বরূপ, D-Bus ইন্টারফেসের জন্য com.acme.Coyote নামটি ব্যবহার করা হয়েছে
ComAcmeCoyote. D-Bus ইন্টারফেসের জন্য org.project.Bar.Frobnicator সহ --ইন্টারফেস-উপসর্গ
org.project., ব্যবহৃত নাম হল BarFrobnicator.
পদ্ধতি, সংকেত এবং বৈশিষ্ট্যের জন্য, যদি নির্দিষ্ট না করা হয়, নামটি এর নামের সাথে ডিফল্ট হয়
পদ্ধতি, সংকেত বা সম্পত্তি।
নামের দুটি ফর্ম ব্যবহার করা হয় - ক্যামেলকেস ফর্ম এবং ছোট হাতের ফর্ম৷ ক্যামেলকেস
ফর্মটি #GType এবং struct নামের জন্য ব্যবহৃত হয়, যখন ছোট হাতের ফর্ম ফাংশনে ব্যবহৃত হয়
নাম লোয়ার-কেস ফর্মটি ক্যামেলকেস থেকে লোয়ার-কেসে রূপান্তর করে গণনা করা হয় এবং
শব্দের সীমানায় আন্ডারস্কোর সন্নিবেশ করানো (নির্দিষ্ট হিউরিস্টিক ব্যবহার করে)।
যদি org.gtk.GDBus.C.Name টীকা দ্বারা প্রদত্ত মান বা --c-নামস্থান পছন্দ
একটি আন্ডারস্কোর রয়েছে (কখনও কখনও বলা হয় কুৎসিত_কেস), তারপর উট-কেস নামটি এসেছে
সমস্ত আন্ডারস্কোর অপসারণ করে, এবং লোয়ার-কেস নামটি লোয়ার-কেসিং দ্বারা উদ্ভূত হয়
স্ট্রিং এটি কিছু পরিস্থিতিতে দরকারী যেখানে সংক্ষিপ্ত রূপ ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি
টীকা ইন্টারফেস নেট ব্যবহার করা হয়.MyCorp.MyApp.iSCSITমান সহ টার্গেট
iSCSI_Target CamelCase ফর্ম হল iSCSITarget যখন ছোট হাতের ফর্ম হল iscsi_target৷
Eject_The_iPod মান সহ EjectTheiPod পদ্ধতিতে টীকাটি ব্যবহার করা হলে,
ছোট হাতের ফর্ম হল eject_the_ipod.
জেনারেটিং ডকবুক উপস্থাপনা
প্রতিটি তৈরি করা ডকবুক এক্সএমএল ফাইল (দেখুন --জেনারেট-ডকবুক বিশদ বিবরণের জন্য বিকল্প) হল একটি
Refentry[2] নিবন্ধটি ডি-বাস ইন্টারফেস বর্ণনা করে।
বিকল্প
নিম্নলিখিত বিকল্পগুলি সমর্থিত:
-h, --help
সাহায্য দেখান এবং প্রস্থান করুন।
--xml-ফাইল ফাইল
ডি-বাস আত্মদর্শন XML ফাইল।
--ইন্টারফেস-উপসর্গ org.project.Prefix.
টাইপনেম গণনা করার সময় সমস্ত D-Bus ইন্টারফেসের নাম থেকে ছিন্ন করার জন্য একটি উপসর্গ
সি বাইন্ডিং এবং ডকবুক sortas গুণ[3]।
--জেনারেট-ডকবুক আউটফাইলস
প্রতিটি D-Bus ইন্টারফেসের জন্য ডকবুক ডকুমেন্টেশন তৈরি করুন এবং এটি রাখুন
OUTFILES-NAME.xml যেখানে NAME ইন্টারফেসের নামের জন্য একটি স্থান-ধারক, যেমন
net.Corp.FooBar ইত্যাদি।
--জেনারেট-সি-কোড আউটফাইলস
সমস্ত D-Bus ইন্টারফেসের জন্য C কোড তৈরি করুন এবং OUTFILES.c এবং OUTFILES.h-এ রাখুন।
--c-নামস্থান আপনার প্রকল্প
জেনারেট করা C কোডের জন্য ব্যবহার করার জন্য নামস্থান। এই মধ্যে হতে প্রত্যাশিত ক্যামেলকেস[4] বা
কুৎসিত_কেস (উপরে দেখুন).
--c-জেনারেট-অবজেক্ট-ম্যানেজার
এই বিকল্পটি পাস করা হলে, উপযুক্ত #GDBusObject, #GDBusObjectProxy,
#GDBusObjectSkeleton এবং #GDBusObjectManagerClient সাবক্লাস তৈরি হয়।
--টীকা এলিমেন্ট চাবি VALUE না
প্রদত্ত XML ফাইলগুলিতে D-Bus টীকা ইনজেক্ট করতে ব্যবহৃত হয়। এর সাথে ব্যবহার করা যেতে পারে
নিম্নলিখিত উপায়ে ইন্টারফেস, পদ্ধতি, সংকেত, বৈশিষ্ট্য এবং আর্গুমেন্ট:
gdbus-codegen --c-namespace MyApp
--generate-c-code myapp-উত্পন্ন
--টীকা "org.project.InterfaceName"
org.gtk.GDBus.C.Name MyFrobnicator
-- annotate "org.project.InterfaceName:Property"
বার ব্যাট
--annotate "org.project.InterfaceName.Method()"
org.freedesktop.DBus.অপ্রচলিত সত্য
--annotate "org.project.InterfaceName.Method()[arg_name]"
সাপের হিস
-- annotate "org.project.InterfaceName::Signal"
বিড়াল মিউ
--annotate "org.project.InterfaceName::Signal[arg_name]"
কুকুর উফ
myapp-dbus-interfaces.xml
যেকোন UTF-8 স্ট্রিং এর জন্য ব্যবহার করা যেতে পারে চাবি এবং VALUE না.
সমর্থিত ডি-বাস টীকা
নিম্নলিখিত ডি-বাস টীকা দ্বারা সমর্থিত হয় gdbus-codegen:
org.freedesktop.DBus.বঞ্চিত
যে কোন উপর ব্যবহার করা যেতে পারে , , এবং নির্দিষ্ট করার উপাদান
যে উপাদানটি অবমূল্যায়িত হয় যদি এর মান সত্য হয়। উল্লেখ্য যে এই টীকাটি
সংজ্ঞায়িত ডি-বাস সবিস্তার বিবরণী[1] এবং শুধুমাত্র সত্য এবং মিথ্যা মান ধরে নিতে পারে।
বিশেষ করে, আপনি সেই সংস্করণটি নির্দিষ্ট করতে পারবেন না যেটিতে উপাদানটি অবমূল্যায়িত হয়েছে বা না
যেকোনো সহায়ক অবচয় বার্তা। এই ধরনের তথ্য উপাদান যোগ করা উচিত
পরিবর্তে ডকুমেন্টেশন।
সি কোড তৈরি করার সময়, এই টীকাটি জেনারেটেডে #G_GNUC_DEPRECATED যোগ করতে ব্যবহৃত হয়
উপাদানের জন্য ফাংশন।
ডকবুক এক্সএমএল তৈরি করার সময়, ডকুমেন্টেশনের সাথে একটি অবচয় সতর্কতা প্রদর্শিত হবে
উপাদান জন্য।
org.gtk.GDBus.যখন থেকে
যে কোন উপর ব্যবহার করা যেতে পারে , , এবং নির্দিষ্ট করার উপাদান
সংস্করণ (যেকোন ফ্রি-ফর্ম স্ট্রিং কিন্তু একটি সংস্করণ-সচেতন সাজানোর ফাংশন ব্যবহার করে তুলনা করে)
উপাদান হাজির.
সি কোড তৈরি করার সময়, এই ক্ষেত্রটি ফাংশন পয়েন্টার অর্ডার নিশ্চিত করতে ব্যবহৃত হয়
ABI/API সংরক্ষণ করে, "স্থিরতা গ্যারান্টি" নামক বিভাগটি দেখুন।
ডকবুক এক্সএমএল তৈরি করার সময়, এই ট্যাগের মান ডকুমেন্টেশনে উপস্থিত হয়।
org.gtk.GDBus.DocString
ডকুমেন্টেশনের জন্য ডকবুক বিষয়বস্তু সহ একটি স্ট্রিং। এই টীকা ব্যবহার করা যেতে পারে
, , , এবং উপাদান
org.gtk.GDBus.DocString.Short
সংক্ষিপ্ত/সংক্ষিপ্ত ডকুমেন্টেশনের জন্য ডকবুক বিষয়বস্তু সহ একটি স্ট্রিং। এই টীকা শুধুমাত্র করতে পারেন
ব্যবহার করা হবে উপাদান
org.gtk.GDBus.C.নাম
যে কোন উপর ব্যবহার করা যেতে পারে , , এবং নির্দিষ্ট করার উপাদান
C কোড তৈরি করার সময় ব্যবহার করা নাম। মান হবে আশা করা হচ্ছে ক্যামেলকেস[4] বা
কুৎসিত_কেস (উপরে দেখুন).
org.gtk.GDBus.C.ForceGVariant
যদি একটি অ-খালি স্ট্রিং সেট করা হয়, তাহলে স্বাভাবিকের পরিবর্তে একটি #GVariant উদাহরণ ব্যবহার করা হবে
সি টাইপ। এই টীকা যেকোন উপর ব্যবহার করা যেতে পারে এবং উপাদান
org.gtk.GDBus.C.UnixFD
যদি একটি অ-খালি স্ট্রিং সেট করা হয়, উত্পন্ন কোড বিনিময়ের পরামিতি অন্তর্ভুক্ত করবে
#GUnixFDList প্রকার ব্যবহার করে ফাইল বর্ণনাকারী। এই টীকা ব্যবহার করা যেতে পারে
উপাদান।
org.gtk.GDBus.DocString টীকা ব্যবহার করার একটি সহজ বিকল্প হিসাবে, সেই পার্সারটি নোট করুন
দ্বারা ব্যবহৃত gdbus-codegen XML মন্তব্যগুলিকে পার্স করে অনুরূপভাবে gtk-doc[5]:
উল্লেখ্য যে @since যেকোনো ইনলাইন ডকুমেন্টেশন বিটে ব্যবহার করা যেতে পারে (যেমন ইন্টারফেসের জন্য,
পদ্ধতি, সংকেত এবং বৈশিষ্ট্য) org.gtk.GDBus সেট করতে। যেহেতু টীকা। জন্য
org.gtk.GDBus.DocString টীকা (এবং ইনলাইন মন্তব্য), নোট করুন যে ফর্মের সাবস্ট্রিংগুলি
#net.Corp.Bar, net.Corp.Bar.FooMethod(), #net.Corp.Bar::বারসিগন্যাল এবং
#net.Corp.InlineDocs:BazProperty সমস্ত সংশ্লিষ্ট ইন্টারফেসের লিঙ্কগুলিতে প্রসারিত করা হয়েছে,
পদ্ধতি, সংকেত এবং সম্পত্তি। উপরন্তু, @ এবং % অক্ষর দিয়ে শুরু হওয়া সাবস্ট্রিং
হিসাবে রেন্ডার করা হয়েছে স্থিতিমাপ[6] এবং ধ্রুব[৭] যথাক্রমে।
যদি উভয় XML মন্তব্য এবং org.gtk.GDBus.DocString বা org.gtk.GDBus.DocString.Short
টীকা উপস্থিত আছে, পরেরটি জিতেছে।
EXAMPLE টি
নিম্নলিখিত D-Bus Introspection XML বিবেচনা করুন।
If gdbus-codegen এই ফাইলে এই মত ব্যবহার করা হয়:
gdbus-codegen --generate-c-code myapp-উৎপন্ন
--c-namespace MyApp
--ইন্টারফেস-প্রিফিক্স net.corp.MyApp।
net.Corp.MyApp.Frobber.xml
myapp-generated [ch] নামে দুটি ফাইল তৈরি হয়। ফাইল একটি বিমূর্ত প্রদান
#GTypeInterface-উত্পন্ন টাইপ বলা হয় MyAppFrobber পাশাপাশি দুটি তাত্ক্ষণিক প্রকারের সাথে
একই নাম কিন্তু সঙ্গে প্রত্যয় প্রক্সি এবং কঙ্কাল. উত্পন্ন ফাইল, মোটামুটি, রয়েছে
নিম্নলিখিত সুবিধা:
/* তিনটি জেনারেট করা প্রকারের জন্য GType ম্যাক্রো */
#MY_APP_TYPE_FROBBER (my_app_frobber_get_type ()) সংজ্ঞায়িত করুন
#MY_APP_TYPE_FROBBER_SKELETON (my_app_frobber_skeleton_get_type ()) সংজ্ঞায়িত করুন
#MY_APP_TYPE_FROBBER_PROXY (my_app_frobber_proxy_get_type ()) সংজ্ঞায়িত করুন
typedef struct _MyAppFrobber MyAppFrobber; /* ডামি টাইপডেফ */
typedef struct
{
GTypeInterface parent_iface;
/* ::নোটিফিকেশন সিগন্যালের জন্য সিগন্যাল হ্যান্ডলার*/
অকার্যকর (*বিজ্ঞপ্তি) (MyAppFrobber *প্রক্সি,
জিভেরিয়েন্ট *আইকন_ব্লব,
জিন্ট উচ্চতা,
const gchar* const *বার্তা);
/* ::হ্যান্ডেল-হ্যালো-ওয়ার্ল্ড সিগন্যালের জন্য সংকেত হ্যান্ডলার*/
gboolean (*handle_hello_world) (MyAppFrobber *প্রক্সি,
GDBusMethodInvocation *আমন্ত্রণ,
const gchar *শুভেচ্ছা);
} MyAppFrobberIface;
/* অ্যাসিঙ্ক্রোনাসলি কল করে HelloWorld() */
অকার্যকর
my_app_frobber_call_hello_world (MyAppFrobber *প্রক্সি,
const gchar * শুভেচ্ছা,
বাতিলযোগ্য *বাতিলযোগ্য,
GAsyncReadyCallback কলব্যাক,
gpointer user_data);
gboolean
my_app_frobber_call_hello_world_finish (MyAppFrobber *প্রক্সি,
gchar **আউট_প্রতিক্রিয়া,
GAsyncResult *result,
GError **ত্রুটি);
/* সিঙ্ক্রোনাস কল করে HelloWorld()। ব্লক কলিং থ্রেড. */
gboolean
my_app_frobber_call_hello_world_sync (MyAppFrobber *প্রক্সি,
const gchar * শুভেচ্ছা,
gchar **আউট_প্রতিক্রিয়া,
বাতিলযোগ্য *বাতিলযোগ্য,
GError **ত্রুটি);
/* HelloWorld() পদ্ধতি কল পরিচালনা সম্পূর্ণ করে */
অকার্যকর
my_app_frobber_complete_hello_world (MyAppFrobber *অবজেক্ট,
GDBusMethodInvocation *আমন্ত্রণ,
const gchar * প্রতিক্রিয়া);
/* ::নোটিফিকেশন সিগন্যাল / নোটিফিকেশন() ডি-বাস সিগন্যাল */ নির্গত করে
অকার্যকর
my_app_frobber_emit_notification (MyAppFrobber *অবজেক্ট,
জিভেরিয়েন্ট *আইকন_ব্লব,
জিন্ট উচ্চতা,
const gchar* const *বার্তা);
/* পায় :verbose GObject সম্পত্তি / Verbose D-Bus সম্পত্তি।
* কোন I/O ব্লক করে না।
*/
gboolean my_app_frobber_get_verbose (MyAppFrobber *অবজেক্ট);
/* :verbose GObject প্রপার্টি / Verbose D-Bus প্রপার্টি সেট করে।
* কোন I/O ব্লক করে না।
*/
void my_app_frobber_set_verbose (MyAppFrobber *অবজেক্ট,
gboolean মান);
/* ইন্টারফেসের তথ্য পায় */
GDBusInterfaceInfo *my_app_frobber_interface_info (অকার্যকর);
/* একটি নতুন কঙ্কাল বস্তু তৈরি করে, রপ্তানির জন্য প্রস্তুত */
MyAppFrobber *my_app_frobber_skeleton_new (অকার্যকর);
/* ক্লায়েন্ট-সাইড প্রক্সি কনস্ট্রাক্টর।
*
* উপরন্তু, _new_for_bus(), _new_for_bus_finish() এবং
* _new_for_bus_sync() প্রক্সি কনস্ট্রাক্টরও তৈরি হয়।
*/
অকার্যকর
my_app_frobber_proxy_new (GDBusConnection *সংযোগ,
GDBusProxyFlags পতাকা,
const gchar *নাম,
const gchar *object_path,
বাতিলযোগ্য *বাতিলযোগ্য,
GAsyncReadyCallback কলব্যাক,
gpointer user_data);
MyAppFrobber *
my_app_frobber_proxy_new_finish (GAsyncResult *res,
GError **ত্রুটি);
MyAppFrobber *
my_app_frobber_proxy_new_sync (GDBusConnection *সংযোগ,
GDBusProxyFlags পতাকা,
const gchar *নাম,
const gchar *object_path,
বাতিলযোগ্য *বাতিলযোগ্য,
GError **ত্রুটি);
সুতরাং, প্রতিটি ডি-বাস পদ্ধতির জন্য, পদ্ধতিটি কল করার জন্য তিনটি সি ফাংশন থাকবে, একটি
একটি ইনকামিং কল পরিচালনার জন্য #GObject সংকেত এবং একটি সম্পূর্ণ করার জন্য একটি C ফাংশন
ইনকামিং কল. প্রতিটি D-Bus সংকেতের জন্য, একটি #GObject সংকেত এবং একটি C ফাংশন রয়েছে৷
এটা নির্গত প্রতিটি ডি-বাস সম্পত্তির জন্য, দুটি সি ফাংশন তৈরি করা হয় (একটি সেটার, একটি
গেটার) এবং একটি #GObject সম্পত্তি। নিম্নলিখিত সারণীতে উত্পন্ন সুবিধাগুলি সংক্ষিপ্ত করা হয়েছে
এবং যেখানে তারা প্রযোজ্য:
┌─────────────────────┬─────────────────────────┬─ ──────────────────────────────────
│ │ মক্কেল │ সার্ভার │
├─────────────────────┼─────────────────────────┼─ ─────────────────────────────────
│প্রকার │ ব্যবহার করুন MyAppFrobberProxy │ যে কোনো ধরনের বাস্তবায়ন │
│ │ │ the MyAppFrobber │
│ │ │ ইন্টারফেস │
├─────────────────────┼─────────────────────────┼─ ─────────────────────────────────
│পদ্ধতি │ ব্যবহার m_a_f_hello_world() │ এর মাধ্যমে গ্রহন করুন
│ │ কল করতে। │ হ্যান্ডেল_হ্যালো_ওয়ার্ল্ড() │
│ │ │ সংকেত হ্যান্ডলার। সম্পূর্ণ │
│ │ │ │ দিয়ে কল করুন
│ │ │ m_a_f_complete_hello_world() │
├─────────────────────┼─────────────────────────┼─ ─────────────────────────────────
│সংকেত │ সংযোগ │ ব্যবহার │
│ │ :: বিজ্ঞপ্তি জিও অবজেক্ট │ m_a_f_emit_notification() থেকে │
│ │ সংকেত। │ নির্গত সংকেত। │
├─────────────────────┼─────────────────────────┼─ ─────────────────────────────────
│প্রপার্টি (পড়া) │ ব্যবহার করুন m_a_f_get_verbose() │ #GObject এর │ বাস্তবায়ন করুন
│ │ বা : verbose. │ get_property() vfunc │
├─────────────────────┼─────────────────────────┼─ ─────────────────────────────────
│প্রপার্টি (লেখা) │ ব্যবহার করুন m_a_f_set_verbose() │ #GObject এর │ বাস্তবায়ন করুন
│ │ বা : verbose. │ সেট_সম্পত্তি() vfunc │
└─────────────────────┴─────────────────────────┴─ ──────────────────────────────────
মক্কেলের পক্ষে ব্যবহার
আপনি জেনারেট কনস্ট্রাক্টরগুলির সাথে জেনারেটেড প্রক্সি টাইপ ব্যবহার করতে পারেন:
MyAppFrobber *প্রক্সি;
GError *ত্রুটি;
ত্রুটি = NULL;
প্রক্সি = my_app_frobber_proxy_new_for_bus_sync (
G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
"net.Corp.MyApp", /* বাসের নাম */
"/net/Corp/MyApp/SomeFrobber", /* অবজেক্ট */
NULL, /* G বাতিলযোগ্য* */
&ত্রুটি);
/* প্রক্সি দিয়ে কিছু করুন */
g_object_unref (প্রক্সি);
জেনেরিক #GDBusProxy সুবিধাগুলি ব্যবহার করার পরিবর্তে, কেউ তৈরি করা পদ্ধতিগুলি ব্যবহার করতে পারে
যেমন my_app_frobber_call_hello_world() আহ্বান করতে
net.Corp.MyApp.Frobber.HelloWorld() D-বাস পদ্ধতি, এর সাথে সংযোগ করুন :: বিজ্ঞপ্তি
GObject সিগন্যাল পেতে net.Corp.MyApp.Frobber::বিজ্ঞপ্তি ডি-বাস সংকেত এবং পেতে/সেট
দ্য net.Corp.MyApp.Frobber:Verbose ডি-বাস সম্পত্তি GObject সম্পত্তি ব্যবহার করে
: verbose অথবা my_app_get_verbose() এবং my_app_set_verbose() পদ্ধতি মান ব্যবহার করুন
#GObject::প্রপার্টি পরিবর্তন শুনতে সিগন্যাল অবহিত করুন।
মনে রাখবেন যে সমস্ত সম্পত্তি অ্যাক্সেস #GDBusProxy এর সম্পত্তি ক্যাশের মাধ্যমে হয় তাই কোনো I/O করা হয় না
বৈশিষ্ট্য পড়ার সময়। এছাড়াও নোট করুন যে একটি সম্পত্তি সেট করার কারণ হবে
org.freedesktop.DBus.Properties.Set[৮] রিমোট অবজেক্টে কল করার পদ্ধতি। এই
কল, তবে, অ্যাসিঙ্ক্রোনাস তাই একটি সম্পত্তি সেটিং ব্লক করবে না। আরও, পরিবর্তন হল
বিলম্বিত এবং কোন ত্রুটি পরীক্ষা করা সম্ভব নয়।
সার্ভার-সাইড ব্যবহার
উৎপন্ন MyAppFrobber ইন্টারফেসটি ডিজাইন করা হয়েছে তাই এটি একটি তে বাস্তবায়ন করা সহজ
#গোবজেক্ট সাবক্লাস। উদাহরণস্বরূপ, পরিচালনা করা ওহে বিশ্ব() পদ্ধতি আহ্বান, vfunc সেট করুন
উন্নত হ্যান্ডেল_হ্যালো_হ্যালো_ওয়ার্ল্ড() মধ্যে MyAppFrobberIface গঠন অনুরূপ, হ্যান্ডেল
net.Corp.MyApp.Frobber:Verbose সম্পত্তি ওভাররাইড : verbose থেকে #GObject সম্পত্তি
উপশ্রেণী একটি সংকেত নির্গত করতে, যেমন ব্যবহার করুন my_app_emit_signal() অথবা g_signal_emit_by_name()।
সাবক্লাসিংয়ের পরিবর্তে, জেনারেট করা ব্যবহার করা প্রায়শই সহজ MyAppFrobberSkeleton
উপশ্রেণী ইনকামিং পদ্ধতি কল পরিচালনা করতে, ব্যবহার করুন g_signal_connect() সাথে ::হাতল-*
সংকেত এবং পরিবর্তে #GObject এর ওভাররাইডিং get_property() এবং সেট_সম্পত্তি() vfuncs,
g_object_get() এবং g_object_set() অথবা জেনারেট করা প্রপার্টি গেটার এবং সেটার ব্যবহার করুন (
উত্পন্ন শ্রেণীর একটি অভ্যন্তরীণ সম্পত্তি ব্যাগ বাস্তবায়ন আছে)।
স্ট্যাটিক জিবুলিয়ান
on_handle_hello_world (MyAppFrobber *ইন্টারফেস,
GDBusMethodInvocation *আমন্ত্রণ,
const gchar * শুভেচ্ছা,
gpointer user_data)
{
যদি (g_strcmp0 (অভিবাদন, "বু") != 0)
{
gchar * প্রতিক্রিয়া;
প্রতিক্রিয়া = g_strdup_printf ("শব্দ! আপনি `%s' বলেছেন।", শুভেচ্ছা);
my_app_complete_hello_world (ইন্টারফেস, আহ্বান, প্রতিক্রিয়া);
g_free (প্রতিক্রিয়া);
}
আর
{
g_dbus_method_invocation_return_error (আমন্ত্রণ,
MY_APP_ERROR,
MY_APP_ERROR_NO_WHINING,
"আরে, %s, কোন হাহাকার হবে না!",
g_dbus_method_invocation_get_sender (আমন্ত্রণ));
}
সত্য ফেরত;
}
[...]
ইন্টারফেস = my_app_frobber_skeleton_new ();
my_app_frobber_set_verbose (ইন্টারফেস, TRUE);
g_signal_connect (ইন্টারফেস,
"হ্যান্ডেল-হ্যালো-ওয়ার্ল্ড",
G_CALLBACK (অন_হ্যান্ডেল_হ্যালো_ওয়ার্ল্ড),
some_user_data);
[...]
ত্রুটি = NULL;
যদি (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (ইন্টারফেস),
সংযোগ,
"/path/of/dbus_object",
&ত্রুটি))
{
/* হ্যান্ডেল ত্রুটি */
}
পারমাণবিক পরিবর্তনের সুবিধার জন্য (একই সময়ে একাধিক বৈশিষ্ট্য পরিবর্তন হয়),
#GObject::notify সংকেত প্রাপ্ত হলে সারিবদ্ধ করা হয়। সারি একটি নিষ্ক্রিয় মধ্যে নিষ্কাশন করা হয়
হ্যান্ডলার (যাকে থ্রেডের থ্রেড-ডিফল্ট প্রধান লুপ থেকে বলা হয় যেখানে
কঙ্কাল অবজেক্ট তৈরি করা হয়েছিল) এবং এর নির্গমন ঘটাবে
org.freedesktop.DBus.Properties::Properties Changed[৮] সমস্ত বৈশিষ্ট্য সহ সংকেত
পরিবর্তিত হয়েছে. এর জন্য g_dbus_interface_skeleton_flush() বা g_dbus_object_skeleton_flush() ব্যবহার করুন
অবিলম্বে সারি খালি করুন। এর জন্য g_object_freeze_notify() এবং g_object_thaw_notify() ব্যবহার করুন
পারমাণবিক পরিবর্তনগুলি যদি একটি ভিন্ন থ্রেডে থাকে।
C প্রকার ম্যাপিং
স্কেলার প্রকার (টাইপ-স্ট্রিং 'b', 'y', 'n', 'q', 'i', 'u', 'x', 't' এবং 'd') ), স্ট্রিং
(টাইপ-স্ট্রিং 's', 'ay', 'o' এবং 'g') এবং স্ট্রিং এর অ্যারে (টাইপ-স্ট্রিং 'as', 'ao' এবং
'aay') প্রাকৃতিক প্রকারের সাথে ম্যাপ করা হয়, যেমন #gboolean, #gdouble, #gint, gchar*, gchar**
এবং তাই বাকি সবকিছু #GVariant প্রকারে ম্যাপ করা হয়েছে।
এই স্বয়ংক্রিয় ম্যাপিং টীকা ব্যবহার করে বন্ধ করা যেতে পারে
org.gtk.GDBus.C.ForceGVariant - যদি ব্যবহার করা হয় তাহলে একটি #GVariant সর্বদা পরিবর্তে বিনিময় করা হয়
সংশ্লিষ্ট নেটিভ সি টাইপ। এই টীকাটি ব্যবহার করার সময় ব্যবহার করা সুবিধাজনক হতে পারে
বাইটস্ট্রিংস (টাইপ-স্ট্রিং 'ay') ডেটার জন্য যা NUL বাইট এমবেড করতে পারে।
স্থিতিশীলতা গ্যারান্টী বা নিশ্চয়তা দিচ্ছে
উত্পন্ন সি ফাংশনগুলি তাদের ABI পরিবর্তন না করার গ্যারান্টি দেওয়া হয়, যদি একটি পদ্ধতি,
সিগন্যাল বা সম্পত্তি আত্মবিশ্লেষণ XML-এ তার স্বাক্ষর পরিবর্তন করে না, উত্পন্ন সি
ফাংশনগুলি এর C ABIও পরিবর্তন করবে না। উত্পন্ন দৃষ্টান্ত এবং শ্রেণীর ABI
কাঠামোও সংরক্ষণ করা হবে।
জেনারেট করা #GType s-এর ABI সংরক্ষিত হবে শুধুমাত্র যদি org.gtk.GDBus. যেহেতু
টীকাটি যুক্তিযুক্তভাবে ব্যবহার করা হয় — এর কারণ হল #GInterface-এর VTable এর উপর নির্ভর করে
সিগন্যাল হ্যান্ডলারের জন্য ফাংশন পয়েন্টার। বিশেষ করে, যদি একটি ডি-বাস পদ্ধতি, সম্পত্তি বা
সংকেত বা একটি D-Bus ইন্টারফেসে যোগ করা হয়, তারপর জেনারেট করা #GInterface প্রকারের ABI হল
সংরক্ষিত যদি, এবং শুধুমাত্র যদি, প্রতিটি যোগ করা পদ্ধতি, সম্পত্তি সংকেত তাদের সাথে টীকা করা হয়
org.gtk.GDBus. যেহেতু পূর্ববর্তী সংস্করণগুলির তুলনায় একটি বড় সংস্করণ নম্বর ব্যবহার করে টীকা৷
জেনারেট করা সি কোডটি বর্তমানে এর সাথে টীকা করা হবে gtk-doc[৫]/ জিওবজেক্ট
অন্তর্দর্শন[9] মন্তব্য / টীকা. লেআউট এবং বিষয়বস্তু পরিবর্তন হতে পারে
ভবিষ্যত তাই কোন গ্যারান্টি নেই যেমন SECTION ব্যবহার ইত্যাদি।
যদিও D-Bus ইন্টারফেসের জন্য জেনারেট করা ডকবুক পরিবর্তন হবে বলে আশা করা হচ্ছে না, কোনো গ্যারান্টি নেই
এই সময়ে দেওয়া হয়.
এটা মনে রাখা গুরুত্বপূর্ণ যে জেনারেট করা কোড রিভিশনে চেক করা উচিত নয়
নিয়ন্ত্রণ ব্যবস্থা, বা এটি বিতরণ করা উৎস সংরক্ষণাগার অন্তর্ভুক্ত করা উচিত নয়।
onworks.net পরিষেবা ব্যবহার করে অনলাইনে gdbus-codegen ব্যবহার করুন