2012-05-11 16 views
3

標準の「ポーリング」方法の代わりにシステムトレイにあるアプリケーションがあります(X秒間隔でサーバーをチェックして更新します)。プッシュ通知を使用したいシステム。更新があると、すべてのクライアントにメッセージが送信され、タスクが実行されます。ウェブサーバーはApacheとPHPを持つDebianになります。デスクトップアプリケーションにプッシュ通知を送信する方法

ターゲットプラットフォームは.NET 3.5です。これはどのように行われますか? Observer Design Patternは動作しません(.NET 4.0以上であるため)。

+4

* 'オブザーバ設計Pattern'は(原因、それは.NET 4.0以上であることだし)動作しません。私は、.NET 1.1で動作するように持っているとき、私は' Singleton'パターン以来、それを嫌います* .NET 2.0 –

+6

までは設計されていませんでした。 "Observer Design Patternは動作しません(.NET 4.0以降)。" - 傑作LOL – dzendras

答えて

2

2つのインターフェイスとその派生コンクリートクラスを作成する必要があります。あなたのサービスは、IObservable、IObserver、ApplicationErrorStateを作成します。

クライアントはクラスを作成し、IObserverからErrorMessageSyncを取得します。

エラーを表示し、.Net 3.5で作成された私の例です。

P.S.また、これは、このアプローチのためのUMLでの代表

/// It will store observers and will push the message 
public interface IErrorObservable 
{ 
    void Attach(IErrorObserver observer); 

    void Detach(IErrorObserver observer); 

    void Notify(); 
} 

public interface IErrorObserver 
{ 
    void Update(string message); 
} 

///It is concrete class to push message 
public sealed class ApplicationErrorState : IErrorObservable 
{ 
    private List<IErrorObserver> _observers = new List<IErrorObserver>(); 

    ///constructor 
    public ApplicationErrorState() 
    { 
    } 

    public void Attach(IErrorObserver observer) 
    { 
    _observers.Add(observer); 
    } 

    public void Detach(IErrorObserver observer) 
    { 
    _observers.Remove(observer); 
    } 

    public void Notify() 
    { 
    foreach (IErrorObserver observer in _observers) 
    { 
     observer.Update(/*Logic*/); 
    } 
    } 

    public void SetError() 
    { 
    Notify(); 
    } 


    ///COncrete subject 
    private class ErrorMessageSync : IErrorObserver 
    { 
    private MyClass _parent; 

    public ErrorMessageSync(MyClass parent) 
    { 
     _parent = parent; 
    } 

    public void Update(string message) 
    { 
      //This work will be done 
    } 
    } 

を使用することができます。

Check this UML diagram

関連する問題