public void Run() { Console.WriteLine("type host"); string host = Console.ReadLine(); TcpChannel m_TcpChan = new TcpChannel(0); ChannelServices.RegisterChannel(m_TcpChan, false); // Create the object for calling into the server ICallsToServer m_RemoteObject = (ICallsToServer) Activator.GetObject(typeof(ICallsToServer), $"tcp://{host}:123/RemoteServer"); // Define sink for events RemotingConfiguration.RegisterWellKnownServiceType( typeof(NotifySink), "ServerEvents", WellKnownObjectMode.Singleton); NotifySink sink = new NotifySink(); // Assign the callback from the server to here var(id, name, timespan, accountId) = GetPrivateVariablesValues(); m_RemoteObject.Notify += new NotifyCallback(sink.FireNotifyCallback); m_RemoteObject.CreateNewAccount(id, name, accountId); Console.WriteLine(" type 'w 1' for withdraw 1 amount to account"); Console.WriteLine(" type 'd 1' for deposit 1 amount to account"); while (!_stop) { var result = Console.ReadLine(); var parametres = result.Split(' '); var createdDate = DateTime.Now.Ticks; switch (parametres[0]) { case "w": Task.Delay(timespan).ContinueWith(x => m_RemoteObject.Withdraw(id, accountId, createdDate, Int32.Parse(parametres[1]))); break; case "d": Task.Delay(timespan).ContinueWith(x => m_RemoteObject.Deposit(id, accountId, createdDate, Int32.Parse(parametres[1]))); break; } } }
private void GetTasks(string id, ICallsToServer m_RemoteObject) { while (true) { Task.Delay(5000); var tasksFromServer = m_RemoteObject.GetTasks(id); var addedTasks = tasksFromServer.Where(x => !tasks.Any(y => y == x)).ToList(); tasks.AddRange(addedTasks); OutputList("added tasks", addedTasks); var deletedTasks = tasks.Where(x => !tasksFromServer.Any(y => y == x)).ToList(); for (var i = 0; i < deletedTasks.Count; i++) { tasks.Remove(deletedTasks[i]); } OutputList("deleted tasks", deletedTasks); } }
private ICallsToServer GetServerInstance() { tasks = new List <string>(); Console.WriteLine("type host"); string host = Console.ReadLine(); TcpChannel m_TcpChan = new TcpChannel(0); ChannelServices.RegisterChannel(m_TcpChan, false); // Create the object for calling into the server ICallsToServer m_RemoteObject = (ICallsToServer) Activator.GetObject(typeof(ICallsToServer), $"tcp://{host}:123/RemoteServer"); return(m_RemoteObject); }
static void Main(string[] args) { // Sleep for a moment to let the sewrver start System.Threading.Thread.Sleep(2000); // Use a defined port to receive callbacks or 0 to receive available port TcpChannel m_TcpChan = new TcpChannel(0); ChannelServices.RegisterChannel(m_TcpChan, false); // Create the object for calling into the server ICallsToServer m_RemoteObject = (ICallsToServer) Activator.GetObject(typeof(ICallsToServer), "tcp://127.0.0.1:8392/RemoteServer"); // Must match IP and port on server // Define sink for events RemotingConfiguration.RegisterWellKnownServiceType( typeof(NotifySink), "ServerEvents", WellKnownObjectMode.Singleton); NotifySink sink = new NotifySink(); // Assign the callback from the server to here m_RemoteObject.Notify += new NotifyCallback(sink.FireNotifyCallback); // Keep calling till the server is gone (This is not necessary) Console.WriteLine("Client is now ready to send and receive data..."); int n = 1; while (true) { try { m_RemoteObject.SomeSimpleFunction(n++); System.Threading.Thread.Sleep(1000); } catch { Console.WriteLine("Server is not responding. Go home."); return; } } }
private void GetTasks(string id, ICallsToServer mRemoteObject) { while (true) { Task.Delay(PollDelay); var tasksFromServer = mRemoteObject.GetTasks(id); var addedTasks = tasksFromServer.Except(_tasks).ToList(); _tasks.AddRange(addedTasks); OutputList("added tasks", addedTasks); var deletedTasks = _tasks.Except(tasksFromServer).ToList(); foreach (var task in deletedTasks) { _tasks.Remove(task); } OutputList("deleted tasks", deletedTasks); } }