using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.ServiceModel; using System.Threading; namespace Seikactl { public class WCFClient { NetNamedPipeBinding Binding = new NetNamedPipeBinding(); TimeSpan keeptime = new TimeSpan(24, 00, 00); string BaseAddr = "net.pipe://localhost/EchoSeika/CentralGate/ApiEntry"; public WCFClient() { } ~WCFClient() { } private ChannelFactory CreateChannelFactory() { var ans = new ChannelFactory(Binding, new EndpointAddress(BaseAddr)); while (ans.State != CommunicationState.Created) { Thread.Sleep(10); } return ans; } private IScAPIs CreateChannel(ChannelFactory ChannelSc) { var ans = ChannelSc.CreateChannel(); (ans as IContextChannel).OperationTimeout = keeptime; while (ChannelSc.State != CommunicationState.Opened) { Thread.Sleep(10); } return ans; } public string Version() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.Version(); cf.Close(); return ans; } public void ProductScan() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.ProductScan(); cf.Close(); } public void BootHttpService() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.BootHttpService(); cf.Close(); } public Dictionary AvatorList() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.AvatorList(); cf.Close(); return ans; } public Dictionary> AvatorList2() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.AvatorList2(); cf.Close(); return ans; } public Dictionary> AvatorListDetail2() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var list1 = api.AvatorListDetail2(); cf.Close(); var ans = new Dictionary>(); foreach(var item1 in list1) { if (item1.Value["isalias"] == "False") { ans.Add(item1.Key, new Dictionary()); foreach (var item2 in item1.Value) { ans[item1.Key].Add(item2.Key, item2.Value); } } } return ans; } public Dictionary>> GetDefaultParams2(int cid) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.GetDefaultParams2(cid); cf.Close(); return ans; } public Dictionary>> GetCurrentParams2(int cid) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.GetCurrentParams2(cid); cf.Close(); return ans; } public void ResetParams2(int cid) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.ResetParams2(cid); cf.Close(); } public double Talk(int cid, string talktext, string filepath, Dictionary effects, Dictionary emotions) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.Talk(cid, talktext, filepath == "" ? "" : MakeFullPath(filepath), effects, emotions); cf.Close(); return ans; } public double Talk2(int cid, string[] talktexts, string filepath, Dictionary effects, Dictionary emotions) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); var ans = api.Talk2(cid, talktexts, filepath == "" ? "" : MakeFullPath(filepath), effects, emotions); cf.Close(); return ans; } public void TalkAsync(int cid, string talktext, Dictionary effects, Dictionary emotions) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.TalkAsync(cid, talktext, effects, emotions); cf.Close(); } public void TalkAsync2(int cid, string[] talktexts, Dictionary effects, Dictionary emotions) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.TalkAsync2(cid, talktexts, effects, emotions); cf.Close(); } public int CheckCid(int cid) { var cf = CreateChannelFactory(); var api = CreateChannel(cf); int ans = api.CheckCid(cid); cf.Close(); return ans; } public void Shutdown() { var cf = CreateChannelFactory(); var api = CreateChannel(cf); api.Shutdown(); cf.Close(); } private string MakeFullPath(string filepath) { return Path.GetFullPath(filepath); } } [ServiceContract(SessionMode = SessionMode.Required)] public interface IScAPIs { [OperationContract] string Version(); [OperationContract] void ProductScan(); [OperationContract] void BootHttpService(); [OperationContract] Dictionary AvatorList(); [OperationContract] Dictionary> AvatorList2(); [OperationContract] Dictionary> AvatorListDetail2(); [OperationContract] Dictionary>> GetDefaultParams2(int cid); [OperationContract] Dictionary>> GetCurrentParams2(int cid); [OperationContract] void ResetParams2(int cid); [OperationContract] double Talk(int cid, string talktext, string filepath, Dictionary effects, Dictionary emotions); [OperationContract] double Talk2(int cid, string[] talktexts, string filepath, Dictionary effects, Dictionary emotions); [OperationContract] void TalkAsync(int cid, string talktext, Dictionary effects, Dictionary emotions); [OperationContract] void TalkAsync2(int cid, string[] talktexts, Dictionary effects, Dictionary emotions); [OperationContract] double Save(int cid, string talktext, string filepath, Dictionary effects, Dictionary emotions); [OperationContract] int CheckCid(int cid); [OperationContract] void Shutdown(); } }