1 // This source code is dual-licensed under the Apache License, version 2 // 2.0, and the Mozilla Public License, version 1.1. 3 // 4 // The APL v2.0: 5 // 6 //--------------------------------------------------------------------------- 7 // Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial 8 // Technologies LLC., and Rabbit Technologies Ltd. 9 // 10 // Licensed under the Apache License, Version 2.0 (the "License"); 11 // you may not use this file except in compliance with the License. 12 // You may obtain a copy of the License at 13 // 14 // http://www.apache.org/licenses/LICENSE-2.0 15 // 16 // Unless required by applicable law or agreed to in writing, software 17 // distributed under the License is distributed on an "AS IS" BASIS, 18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 // See the License for the specific language governing permissions and 20 // limitations under the License. 21 //--------------------------------------------------------------------------- 22 // 23 // The MPL v1.1: 24 // 25 //--------------------------------------------------------------------------- 26 // The contents of this file are subject to the Mozilla Public License 27 // Version 1.1 (the "License"); you may not use this file except in 28 // compliance with the License. You may obtain a copy of the License at 29 // http://www.rabbitmq.com/mpl.html 30 // 31 // Software distributed under the License is distributed on an "AS IS" 32 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 33 // License for the specific language governing rights and limitations 34 // under the License. 35 // 36 // The Original Code is The RabbitMQ .NET Client. 37 // 38 // The Initial Developers of the Original Code are LShift Ltd, 39 // Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd. 40 // 41 // Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd, 42 // Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd 43 // are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial 44 // Technologies LLC, and Rabbit Technologies Ltd. 45 // 46 // Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift 47 // Ltd. Portions created by Cohesive Financial Technologies LLC are 48 // Copyright (C) 2007-2010 Cohesive Financial Technologies 49 // LLC. Portions created by Rabbit Technologies Ltd are Copyright 50 // (C) 2007-2010 Rabbit Technologies Ltd. 51 // 52 // All Rights Reserved. 53 // 54 // Contributor(s): ______________________________________. 55 // 56 //--------------------------------------------------------------------------- 57 using RabbitMQ.Client; 58 using RabbitMQ.Util; 59 60 namespace RabbitMQ.Client.Impl 61 { 62 public class ShutdownContinuation 63 { 64 public readonly BlockingCell m_cell = new BlockingCell(); ShutdownContinuation()65 public ShutdownContinuation() { } 66 67 // You will note there are two practically identical overloads 68 // of OnShutdown() here. This is because Microsoft's C# 69 // compilers do not consistently support the Liskov 70 // substitutability principle. When I use 71 // OnShutdown(object,ShutdownEventArgs), the compilers 72 // complain that OnShutdown can't be placed into a 73 // ConnectionShutdownEventHandler because object doesn't 74 // "match" IConnection, even though there's no context in 75 // which the program could Go Wrong were it to accept the 76 // code. The same problem appears for 77 // ModelShutdownEventHandler. The .NET 1.1 compiler complains 78 // about these two cases, and the .NET 2.0 compiler does not - 79 // presumably they improved the type checker with the new 80 // release of the compiler. 81 OnShutdown(IConnection sender, ShutdownEventArgs reason)82 public virtual void OnShutdown(IConnection sender, ShutdownEventArgs reason) 83 { 84 m_cell.Value = reason; 85 } 86 OnShutdown(IModel sender, ShutdownEventArgs reason)87 public virtual void OnShutdown(IModel sender, ShutdownEventArgs reason) 88 { 89 m_cell.Value = reason; 90 } 91 Wait()92 public virtual ShutdownEventArgs Wait() 93 { 94 return (ShutdownEventArgs)m_cell.Value; 95 } 96 } 97 } 98