public SocketClient(string host, int port, MessageManager messageManager, TcpReceiver tcpReceiver) { _host = host; _port = port; _sendingMessagesQueue = new Queue <SocketMessage>(); _tcpReceiver = tcpReceiver; _messageManager = messageManager; StartTcpSendingThread(); Thread.Sleep(20000); StartTcpReceivingThread(); }
internal virtual void Disconnect() { if (Disposed) { return; } if (ioc != null) { ioc.RemoveChannel(this); } lock (ConnectionLock) { if (Status != ChannelStatus.CONNECTED) { return; } Status = ChannelStatus.DISCONNECTED; StartSearchTime = DateTime.Now; ioc = null; SID = 0; if (PrivMonitorChanged != null) { AfterConnect(action => { if (MonitoredType == null) { return; } DataPacket p = DataPacket.Create(16 + 16); p.Command = (ushort)CommandID.CA_PROTO_EVENT_ADD; p.DataType = (ushort)TypeHandling.Lookup[MonitoredType]; p.DataCount = ChannelDataCount; p.Parameter1 = SID; p.Parameter2 = CID; p.SetUInt16(12 + 16, (ushort)MonitorMask); if (ioc != null) { ioc.Send(p); } else { Disconnect(); } }); } } }
public MainWindow() { InitializeComponent(); if (Properties.Settings.Default.Name.CompareTo("") == 0) { // first application run UserSettings us = new UserSettings(); us.ShowDialog(); //ShowDialog returns only when the window is closed } DataContext = this; SendingTransferList = new ObservableCollection <FileTransfer>(); // sorting sending fileTransfers ICollectionView sendingTransferListView = CollectionViewSource.GetDefaultView(SendingTransferList); sendingTransferListView.SortDescriptions.Add(new SortDescription("Status", ListSortDirection.Ascending)); sendingTransferListView.SortDescriptions.Add(new SortDescription("ManagementDateTime", ListSortDirection.Ascending)); TCPSender.NewTransferEvent += AddNewTransfer; // udp socket listening for request UdpListener = new UdpListener(); // launching background thread Thread udpListenerThread = new Thread(UdpListener.Listen); udpListenerThread.IsBackground = true; udpListenerThread.Start(); ReceivingTransferList = new ObservableCollection <FileTransfer>(); // sorting receiving fileTransfers ICollectionView receivingTransferListView = CollectionViewSource.GetDefaultView(ReceivingTransferList); receivingTransferListView.SortDescriptions.Add(new SortDescription("Status", ListSortDirection.Ascending)); receivingTransferListView.SortDescriptions.Add(new SortDescription("ManagementDateTime", ListSortDirection.Ascending)); // tcp socket listening for file transfer TcpReceiver tcpReceiver = new TcpReceiver(Constants.TRANSFER_TCP_PORT); TcpReceiver.NewTransferEvent += AddNewTransfer; // launching background thread Thread tcpReceiverThread = new Thread(tcpReceiver.Receive); tcpReceiverThread.SetApartmentState(ApartmentState.STA); tcpReceiverThread.IsBackground = true; tcpReceiverThread.Start(); // retrieving old sending file transfers if (Properties.Settings.Default.SendingTransferFiles != "") { string transfers = Properties.Settings.Default.SendingTransferFiles; foreach (var fileTransfer in JsonConvert.DeserializeObject <ObservableCollection <FileTransfer> >(transfers)) { if (fileTransfer.Status == TransferStatus.Pending) { fileTransfer.Status = TransferStatus.Error; } SendingTransferList.Add(fileTransfer); } } // retrieving old receiving file transfers if (Properties.Settings.Default.ReceivingTransferFiles != "") { string transfers = Properties.Settings.Default.ReceivingTransferFiles; foreach (var fileTransfer in JsonConvert.DeserializeObject <ObservableCollection <FileTransfer> >(transfers)) { if (fileTransfer.Status == TransferStatus.Pending) { fileTransfer.Status = TransferStatus.Error; } ReceivingTransferList.Add(fileTransfer); } } }
internal void SetIoc(DataPipe pipe) { TcpReceiver tcpReceiver = (TcpReceiver)pipe[0]; tcpReceiver.AddChannel(this); lock (ConnectionLock) { if (!Client.Searcher.Contains(this)) { return; } Client.Searcher.Remove(this); SID = 0; ioc = tcpReceiver; lock (ioc.ChannelSID) { //Console.WriteLine(ioc.ChannelSID.Count); // Channel already known if (ioc.ChannelSID.ContainsKey(ChannelName)) { SID = ioc.ChannelSID[ChannelName]; //Console.WriteLine("Here"); EpicsChannel chan = ioc.ConnectedChannels.FirstOrDefault(row => row.ChannelName == ChannelName && row.ChannelDataCount != 0); if (chan != null) { this.ChannelDataCount = chan.ChannelDataCount; this.channelDefinedType = chan.channelDefinedType; this.ChannelDataCount = chan.ChannelDataCount; this.channelDefinedType = chan.ChannelDefinedType; Status = ChannelStatus.CONNECTED; ConnectionEvent.Set(); } } } } if (SID != 0) { //Console.WriteLine("SID " + SID + " STATUS CHANGED"); if (StatusChanged != null) { StatusChanged(this, Status); } return; } if (Client.Configuration.DebugTiming) { lock (ElapsedTimings) { if (!ElapsedTimings.ContainsKey("IocConnection")) { ElapsedTimings.Add("IocConnection", Stopwatch.Elapsed); } } } // We need to create the channel int padding; if (ChannelName.Length % 8 == 0) { padding = 8; } else { padding = (8 - (ChannelName.Length % 8)); } DataPacket packet = DataPacket.Create(16 + ChannelName.Length + padding); packet.Command = (ushort)CommandID.CA_PROTO_CREATE_CHAN; packet.DataType = 0; packet.DataCount = 0; packet.Parameter1 = cid; packet.Parameter2 = (uint)EpicsConstants.CA_MINOR_PROTOCOL_REVISION; packet.SetDataAsString(ChannelName); if (ioc != null) { ioc.Send(packet); } else { Disconnect(); return; } lock (ElapsedTimings) { if (!ElapsedTimings.ContainsKey("SendCreateChannel")) { ElapsedTimings.Add("SendCreateChannel", Stopwatch.Elapsed); } } }