Subscriber ইন্টারফেস পাবলিশারকে সাবস্ক্রাইব করে onNext() মেথডের মাধ্যমে আইটেম রিসিভ করতে, onError() মেথডের মাধ্যমে এরর মেসেজ, অথবা onComplete() মেথডের মাধ্যমে আর কোনো আইটেম এক্সপেক্টেড নয় সিগন্যাল পেতে। সেই সব ঘটনার আগে, পাবলিশার onSubscription() মেথড কল করে।
public interface Subscriber<T> {
public void onSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
Subscriber ইন্টারফেসের নিয়মাবলী:
- একটি Subscriber অবশ্যই Subscription.request(long n) মেথড কল করতে হবে onNext() সিগন্যাল রিসিভ করার জন্য।
- Subscriber.onComplete() এবং Subscriber.onError(Throwable t) মেথড অবশ্যই Subscription বা Publisher-এ কোনো মেথড কল করতে পারবে না।
- Subscriber.onComplete() এবং Subscriber.onError(Throwable t) মেথড অবশ্যই সাবস্ক্রিপশন ক্যানসেলড বিবেচনা করতে হবে সিগন্যাল রিসিভ করার পর।
- একটি Subscriber অবশ্যই Subscription.cancel() মেথড কল করতে হবে একটি দিয়ে Subscription-এ onSubscribe() সিগন্যাল এর পর যদি এর ইতিমধ্যে একটি এক্টিভ Subscription থাকে।
- একটি Subscriber অবশ্যই Subscription.cancel() মেথড কল করতে হবে যদি Subscription আর দরকার নেই।
- একটি Subscriber নিশ্চিত করতে হবে যে এর Subscription-এর request এবং cancel মেথডের সকল কল সিরিয়ালি পারফর্ম করা হয়।
- একটি Subscriber অবশ্যই এক বা অধিক onNext() সিগন্যাল রিসিভ করতে হবে Subscription.cancel() মেথড কল করার পর যদি এখনও রিকোয়েস্টেড এলিমেন্ট পেন্ডিং থাকে। এই মেথড অন্ডারলাইয়িং ক্লিনিং অপারেশন অবিলম্বে পারফর্ম করবে তা গ্যারান্টি দেয় না।
- একটি Subscriber অবশ্যই onComplete() সিগন্যাল রিসিভ করতে হবে সাথে বা ছাড়া একটি পূর্ববর্তী Subscription.request(long n) কল।
- একটি Subscriber অবশ্যই onError() সিগন্যাল রিসিভ করতে হবে সাথে বা ছাড়া একটি পূর্ববর্তী Subscription.request(long n) কল।
- একটি Subscriber নিশ্চিত করতে হবে যে এর সিগন্যাল মেথডের সকল কল রেসপেক্টিভ সিগন্যালের প্রসেসিং-এর আগে হয়। এর মানে Subscriber অবশ্যই তার প্রসেসিং লজিকে সিগন্যাল সঠিকভাবে পাবলিশ করার দায়িত্ব নেবে।
- Subscriber.onSubscribe() একটি দিয়ে Subscriber-এর জন্য সর্বোচ্চ একবার কল করা উচিত।
- onSubscribe(), onNext(), onError() বা onComplete() মেথড কল অবশ্যই রিটার্ন করতে হবে এক্সসেপ্ট যখন কোনো প্রদত্ত প্যারামিটার null হয়, যাতে কেসে এটি কলারের কাছে NullPointerException থ্রো করতে হবে।