WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(3):中看不中用的解... 阅读

适合C# Actor的消息执行方式(3):中看不中用的解决方案

 2010-09-30 20:50:26 来源:WEB开发网   
核心提示: publicinterfaceIPongMessageHandler{voidPong(Pongpong);}publicinterfaceIPingMessageHandler{voidPing(Pingping);voidFinish();}使用了接口,自然就要提供方法的实现了,适合C# A

public interface IPongMessageHandler 
{ 
  void Pong(Pong pong); 
} 
 
public interface IPingMessageHandler 
{ 
  void Ping(Ping ping); 
  void Finish(); 
}

使用了接口,自然就要提供方法的实现了。我们先从典型而简单的Pong对象看起:

public class Pong : Actor<Action<IPingMessageHandler>>, IPingMessageHandler 
{ 
  ... 
 
  #region IPingMessageHandler Members 
 
  void IPingMessageHandler.Ping(Ping ping) 
  { 
    Console.WriteLine("Pong received ping"); 
    ping.Post(h => h.Pong(this)); 
  } 
 
  void IPingMessageHandler.Finish() 
  { 
    Console.WriteLine("Finished"); 
    this.Exit(); 
  } 
 
  #endregion 
}

原本需要在得到消息之后,根据消息的内容作出不同的响应。而现在,消息会被自动转发为接口中的方法调用,我们只需要实现特定的方法即可。在Ping方法中,我们会得到一个Ping类型的对象——于是我们再向它回复一个消息。消息的类型是Action<IPongMessageHandler>,可以看出,使用Lambda表达式构造这样一个消息特别方便。

Ping类也只需要实现IPongMessageHandler即可,只是这段逻辑“略显复杂”:

public class Ping : Actor<Action<IPongMessageHandler>>, IPongMessageHandler 
{ 
  ... 
 
  public void Start(Pong pong) 
  { 
    pong.Post(h => h.Ping(this)); 
  } 
 
  #region IPongMessageHandler Members 
 
  void IPongMessageHandler.Pong(Pong pong) 
  { 
    Console.WriteLine("Ping received pong"); 
 
    if (--this.m_count > 0) 
    { 
      pong.Post(h => h.Ping(this)); 
    } 
    else 
    { 
      pong.Post(h => h.Finish()); 
      this.Exit(); 
    } 
  } 
 
  #endregion 
}

上一页  1 2 3 4 5 6  下一页

Tags:适合 Actor 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接