public void UpdateProject() { while (true) { Thread.Sleep(30); // this sleep time actually controls sync frequency if (!threadRunningFlag || !window.IsProjectSynchronizationEnabled) { continue; } threadRunningFlag = false; Connect(); if (State == ConnectionState.Connected) { // try to push update to server try { if (Project.Current == null) { continue; } string data = DataSerializer <Project> .Serialize(Project.Current); clientProxy.Broadcast(data); } catch (Exception ex) { // unable to connect clientProxy = null; State = ConnectionState.Disconnected; new ErrorHandler(ex); // log error continue; } } } }
public void Connect() { if (clientProxy == null) // create channel here { State = ConnectionState.Connecting; SyncServiceClientCallback callback = new SyncServiceClientCallback(window); // Read server address from configuration string serverAddress = System.Configuration.ConfigurationManager.AppSettings["SyncServiceAddress"]; #if DEBUG_ON Console.WriteLine("serverAddress {0}", serverAddress); #endif DuplexChannelFactory <ISyncServiceClient> factory = new DuplexChannelFactory <ISyncServiceClient>(callback, new NetTcpBinding(), new EndpointAddress(serverAddress)); factory.Open(); clientProxy = factory.CreateChannel(); // try sign in try { SessionInfo info = new SessionInfo(); info.UserName = Environment.UserName; clientProxy.SignIn(info); State = ConnectionState.Connected; } catch (Exception ex) { // unable to connect clientProxy = null; State = ConnectionState.Disconnected; new ErrorHandler(ex); } } }