using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
namespace HelloMesh
{
[ServiceContract(Namespace = "urn:uuid:F0E619F9-3AB7-4b9d-A009-269B381C6C85/", CallbackContract = typeof(IHelloMesh))]
interface IHelloMesh
{
[OperationContract(IsOneWay = true)]
void Say(string message);
}
[ServiceContract(Namespace = "urn:uuid:F0E619F9-3AB7-4b9d-A009-269B381C6C85/", CallbackContract = typeof(IStatus))]
interface IStatus
{
[OperationContract(IsOneWay = true)]
void Busy(string userId);
[OperationContract(IsOneWay = true)]
void NotBusy(string userId);
}
partial class HelloProxy : System.ServiceModel.DuplexClientBase<IHelloMesh>, IHelloMesh
{
public HelloProxy(InstanceContext inputInstance, string name)
: base(inputInstance, name)
{
base.InnerDuplexChannel.Open();
}
public void Say(string message)
{
base.InnerProxy.Say(message);
}
}
partial class StatusProxy : System.ServiceModel.DuplexClientBase<IStatus>, IStatus
{
public StatusProxy(InstanceContext inputInstance, string name)
: base(inputInstance, name)
{
base.InnerDuplexChannel.Open();
}
public void Busy(string userId)
{
base.InnerProxy.Busy(userId);
}
public void NotBusy(string userId)
{
base.InnerProxy.NotBusy(userId);
}
}
class HelloMesh : IHelloMesh, IStatus
{
public void Say(string message)
{
Console.WriteLine("Say : {0}", message);
}
public void Busy(string userId)
{
Console.WriteLine("User {0} is busy", userId);
}
public void NotBusy(string userId)
{
Console.WriteLine("User {0} is not busy", userId);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter your id");
string id = Console.ReadLine();
InstanceContext instanceContext = new InstanceContext(new HelloMesh());
using (HelloProxy hello = new HelloProxy(instanceContext, "HelloEndpoint"))
{
using (StatusProxy status = new StatusProxy(instanceContext, "StatusEndpoint"))
{
string msg = "";
while (msg != "q")
{
msg = Console.ReadLine();
if (msg.StartsWith("busy", StringComparison.CurrentCultureIgnoreCase))
{
status.Busy(id);
}
else if (msg.StartsWith("notbusy", StringComparison.CurrentCultureIgnoreCase))
{
status.NotBusy(id);
}
else
{
hello.Say(msg);
}
}
}
}
}
}
}