コード例 #1
0
        private void connectMon(SocketGroup socketGroup)
        {
            SocketAsyncEventArgs monReceive, monSend;

            if (monConnector.createConnection(out monReceive, out monSend))
            {
                monConnectionFailed = 0;

                ((DataHoldingUserToken)monReceive.UserToken).socketGroup = socketGroup;
                ((DataHoldingUserToken)monSend.UserToken).socketGroup    = socketGroup;
                socketGroup.monReceiveSAEA = monReceive;
                socketGroup.monSendSAEA    = monSend;
                monConnector.startReceive(monReceive);
            }
            else
            {
                socketGroup.monReceiveSAEA = null;
                socketGroup.monSendSAEA    = null;

                // LOCK THIS
                lock (monConnectionCheckLocker)
                {
                    monConnectionFailed++;
                    if (monConnectionFailed >= 5 && !monConnectionCheckStarted)
                    {
                        blocksAcceptor.stop();
                        monConnectionCheckThread = new Thread(() => monConnectionCheckProcess());
                        monConnectionCheckThread.Start();
                        monConnectionCheckStarted = true;
                    }
                }
            }
        }
コード例 #2
0
 private static void AddSockets(SocketGroup socketGroup, string socketGroupString)
 {
     socketGroupString.Split(socketLinkIndicators, StringSplitOptions.RemoveEmptyEntries)
     .Select(GetSocket)
     .ToList()
     .ForEach(socketGroup.Sockets.Add);
 }
コード例 #3
0
 private void ParseItemSockets()
 {
     if (_itemFields.ContainsKey("Sockets"))
     {
         _item.Sockets = SocketGroup.Parse(_itemFields["Sockets"]);
     }
 }
コード例 #4
0
        private void blockConnectionAccepted(SocketAsyncEventArgs saea)
        {
            var socketGroup = new SocketGroup();

            ((DataHoldingUserToken)saea.UserToken).socketGroup = socketGroup;
            socketGroup.blockReceiveSAEA = saea;
            blocksAcceptor.startReceive(saea);
        }
コード例 #5
0
        public void SocketGroupCanParseAbyssalSockets()
        {
            var sg = SocketGroup.Parse("B-B-B A A");

            Assert.AreEqual(2, sg.AbyssalSockets);
            Assert.AreEqual(5, sg.Sockets);
            Assert.AreEqual(3, sg.LargestLink);
        }
コード例 #6
0
        private static SocketGroup GetSocketGroup(string socketGroupString)
        {
            var socketGroup = new SocketGroup();

            AddSockets(socketGroup, socketGroupString);

            return(socketGroup);
        }
コード例 #7
0
        public void SocketGroupParseReturnsSocketGroupObjWithCorrectSockets()
        {
            var sg = SocketGroup.Parse("R R B G W W W");

            Assert.AreEqual(2, sg.RedSockets);
            Assert.AreEqual(1, sg.GreenSockets);
            Assert.AreEqual(1, sg.BlueSockets);
            Assert.AreEqual(3, sg.WhiteSockets);
        }
コード例 #8
0
        public void SocketCountIsEqualToItemSocketCount()
        {
            var item = new MockModdableItem()
            {
                Sockets = SocketGroup.Parse("B B")
            };
            var vm = ItemViewModel.CreateViewModel(item);

            Assert.AreEqual(2, vm.SocketCount.Value);
        }
コード例 #9
0
        /// <summary>Преобразование группы разъёмов в CSV строку</summary>
        /// <param name="group">Группа разъёмов</param>
        /// <returns></returns>
        public static string Serialize(SocketGroup group)
        {
            var result = group.GroupName + Delimiter;

            foreach (var socketName in group.SocketNames)
            {
                result += socketName + Delimiter;
            }
            return(result);
        }
コード例 #10
0
        public void LinkIsSetFromSocketGroup()
        {
            var item = new MockModdableItem()
            {
                Sockets = SocketGroup.Parse("B-B-B")
            };
            var vm = ItemViewModel.CreateViewModel(item);

            Assert.AreEqual(3, vm.Link.Value);
        }
コード例 #11
0
        public void LinkIsCheckedIfEqualTo6()
        {
            var item = new MockModdableItem()
            {
                Sockets = SocketGroup.Parse("B-B-B-B-B-B")
            };
            var vm = ItemViewModel.CreateViewModel(item);

            Assert.IsTrue(vm.Link.Checked);
        }
コード例 #12
0
        public void LinkIsAddedToStatListIfValueIsGreaterThanZero()
        {
            var item = new MockModdableItem()
            {
                Sockets = SocketGroup.Parse("B")
            };
            var vm = ItemViewModel.CreateViewModel(item);

            Assert.IsTrue(vm.ItemStats.Contains(vm.Link));
        }
コード例 #13
0
        private static bool SocketGroupHasRequiredSocketColors(SocketGroup itemLinkedSocketGroup, SocketGroup blockItemSocketGroup)
        {
            var blockSocketGroupColorCounts = blockItemSocketGroup.GroupBy(i => i.Color, (key, values) => new { SocketColor = key, Count = values.Count() }).ToList();
            var itemSocketGroupColorCounts  = itemLinkedSocketGroup.GroupBy(i => i.Color, (key, values) => new { SocketColor = key, Count = values.Count() }).ToList();

            foreach (var blockItemSocketColorCount in blockSocketGroupColorCounts)
            {
                var match = itemSocketGroupColorCounts.FirstOrDefault(i => i.SocketColor == blockItemSocketColorCount.SocketColor && i.Count >= blockItemSocketColorCount.Count);
                if (match == null)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #14
0
        private void messageReceivedFromMon2(byte[] message, SocketAsyncEventArgs saea)
        {
            // log command
            {
                string str = Encoding.ASCII.GetString(message);
                commandLog.Debug(str);
            }

            SocketGroup socketGroup = (saea.UserToken as DataHoldingUserToken).socketGroup;

            if (socketGroup.blockSendSAEA == null)
            {
                socketGroup.blockSendSAEA = blocksAcceptor.createSaeaForSend(socketGroup.blockReceiveSAEA.AcceptSocket);
                ((DataHoldingUserToken)socketGroup.blockSendSAEA.UserToken).socketGroup = socketGroup;
            }

            blocksAcceptor.startSend(socketGroup.blockSendSAEA, message);
        }
コード例 #15
0
        private void connectMon2(SocketGroup socketGroup)
        {
            SocketAsyncEventArgs mon2Receive, mon2Send;

            if (mon2Connector.createConnection(out mon2Receive, out mon2Send))
            {
                ((DataHoldingUserToken)mon2Receive.UserToken).socketGroup = socketGroup;
                ((DataHoldingUserToken)mon2Send.UserToken).socketGroup    = socketGroup;
                socketGroup.mon2ReceiveSAEA = mon2Receive;
                socketGroup.mon2SendSAEA    = mon2Send;
                mon2Connector.startReceive(mon2Receive);
            }
            else
            {
                socketGroup.mon2ReceiveSAEA = null;
                socketGroup.mon2SendSAEA    = null;
            }
        }
        private static ItemSockets GetLinkedItemSockets(int linkCount)
        {
            var result = new ItemSockets();

            if (linkCount > 0)
            {
                var socketGroup = new SocketGroup();

                for (int i = 0; i < linkCount; i++)
                {
                    socketGroup.Sockets.Add(new Socket());
                }

                result.SocketGroups.Add(socketGroup);
            }

            AddSocketsTillMaxSocketCount(linkCount, result);

            return(result);
        }
コード例 #17
0
        private void messageReceivedFromMon(byte[] message, SocketAsyncEventArgs saea)
        {
            if (log.IsDebugEnabled)
            {
                var receivedData = Encoding.ASCII.GetString(message);
                log.Debug("--- messageReceivedFromMon --- " + receivedData);
            }

            if (Settings.Default.PureRetranslate)
            {
                string filename         = Path.Combine(appPath, "purelog"); //((IPEndPoint)saea.AcceptSocket.RemoteEndPoint).Address.ToString();
                var    fs               = new FileStream(filename, FileMode.Append);
                string messageHead      = "^server:";
                var    messageHeadBytes = Encoding.ASCII.GetBytes(messageHead);
                fs.Write(messageHeadBytes, 0, messageHeadBytes.Length);
                fs.Write(message, 0, message.Length);

                var lineEnd      = "\r\n";
                var lineEndBytes = Encoding.ASCII.GetBytes(lineEnd);
                fs.Write(lineEndBytes, 0, lineEndBytes.Length);

                fs.Close();
            }
            else
            {
                string str = Encoding.ASCII.GetString(message);
                commandLog.Debug(str);
            }

            SocketGroup socketGroup = (saea.UserToken as DataHoldingUserToken).socketGroup;

            if (socketGroup.blockSendSAEA == null)
            {
                socketGroup.blockSendSAEA = blocksAcceptor.createSaeaForSend(socketGroup.blockReceiveSAEA.AcceptSocket);
                ((DataHoldingUserToken)socketGroup.blockSendSAEA.UserToken).socketGroup = socketGroup;
            }

            blocksAcceptor.startSend(socketGroup.blockSendSAEA, message);
        }
コード例 #18
0
 PmpSearcher(SocketGroup sockets)
     : base(sockets)
 {
 }
コード例 #19
0
 /// <summary>Создать новую группу разъёмов</summary>
 /// <param name="socketGroup">Группа разъёмов</param>
 /// <returns>Созданная группа разъёмов</returns>
 public SocketGroup CreateSocketGroup(SocketGroup socketGroup)
 {
     return(_groupRepository.Insert(socketGroup));
 }
コード例 #20
0
        public void SocketGroupReturnsCorrectSocketCount()
        {
            var sg = SocketGroup.Parse("R R R");

            Assert.AreEqual(3, sg.Sockets);
        }
コード例 #21
0
        public void SocketGroupReturnsLinkArray()
        {
            var sg = SocketGroup.Parse("R-R-R R-R");

            CollectionAssert.AreEqual(new int[] { 3, 2 }, sg.Links);
        }
コード例 #22
0
        public void SocketGroupReturnsLargestLink()
        {
            var sg = SocketGroup.Parse("R R-R R-R-R");

            Assert.AreEqual(3, sg.LargestLink);
        }
コード例 #23
0
ファイル: UpnpSearcher.cs プロジェクト: bp2008/Mono.Nat
 UpnpSearcher(SocketGroup sockets)
     : base(sockets)
 {
     LastFetched = new Dictionary <Uri, DateTime> ();
     Locker      = new SemaphoreSlim(1, 1);
 }
コード例 #24
0
        public byte[] processMessage(byte[] message, out string imei, SocketGroup socketGroup, out Action action)
        {
            action = Action.Send2Mon;
            string receivedData = string.Empty;

            imei = null;
            try
            {
                receivedData = Encoding.ASCII.GetString(message);
                if (receivedData.StartsWith("$$"))
                {
                    var basePacket = BasePacket.GetFromGlonass(receivedData);
                    imei = basePacket.IMEI;

                    if (basePacket.State.Equals('V'))
                    {
                        basePacket.Latitude  = 0.0d;
                        basePacket.Longitude = 0.0d;
                    }

                    this.mintransMoscowCitySink.SendLocationAndState(basePacket);
                    this.mintransMoscowRegionSink.SendLocationAndState(basePacket);
                    this.retranslatorPilotka.retranslate(basePacket);
                    this.gisHandler.handle(basePacket);

                    if (telemaximaEnabled)
                    {
                        retranslatorTelemaxima.checkAndRetranslate(basePacket);
                    }

                    if (versions.ContainsKey(basePacket.IMEI))
                    {
                        var pair = versions[basePacket.IMEI];
                        basePacket.VERSION = pair.version;

                        pair.cnt = pair.cnt - 1;
                        if (pair.cnt <= 0)
                        {
                            versions.Remove(basePacket.IMEI);
                        }
                    }

                    var gpsData = basePacket.ToPacketGps();

                    packetLog.DebugFormat("src: {0}{1}dst: {2}", receivedData, Environment.NewLine, gpsData);

                    return(Encoding.ASCII.GetBytes(gpsData));
                }
                else
                {
                    try
                    {
                        if (receivedData.ToUpper().Contains("VER:"))
                        {
                            if (socketGroup.IMEI != null)
                            {
                                versions[socketGroup.IMEI] = new Pair(receivedData.Replace("\n", " ").Replace("\r", " "), 5);
                            }

                            if (!receivedData.ToUpper().Contains("VER:9.44") && socketGroup.IMEI != null)
                            {
                                using (var db = new somereasonEntities())
                                {
                                    var blockInfo = db.block_info.FirstOrDefault(_ => _.imei == socketGroup.IMEI);
                                    if (blockInfo == null)
                                    {
                                        blockInfo         = new block_info();
                                        blockInfo.imei    = socketGroup.IMEI;
                                        blockInfo.info    = receivedData;
                                        blockInfo.arrived = DateTime.Now;
                                        db.block_info.AddObject(blockInfo);
                                        db.SaveChanges();
                                        log.Info("VER YES_SAVE IMEI=" + socketGroup.IMEI);
                                    }
                                    else
                                    {
                                        log.Info("VER EXISTS IMEI=" + socketGroup.IMEI);
                                    }
                                }
                            }
                            else
                            {
                                log.Info("VER NOT_SAVE IMEI=" + socketGroup.IMEI ?? "NULL");
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        log.Error(e.ToString());
                    }

                    return(message);
                }
            }
            catch (ReflectionTypeLoadException ex)
            {
                StringBuilder sb = new StringBuilder();
                foreach (Exception exSub in ex.LoaderExceptions)
                {
                    sb.AppendLine(exSub.Message);
                    if (exSub is FileNotFoundException)
                    {
                        FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
                        if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
                        {
                            sb.AppendLine("Fusion Log:");
                            sb.AppendLine(exFileNotFound.FusionLog);
                        }
                    }
                    sb.AppendLine();
                }
                string errorMessage = sb.ToString();
                //Display or log the error based on your application.
                log.Error("DLL = " + errorMessage, ex);
                return(null);
            }
            catch (Exception e)
            {
                log.Error(String.Format("ProcessMessage packet={0}", receivedData), e);
                if (e is BadPacketException || e is ArgumentOutOfRangeException)
                {
                    log.Warn("Send special command");
                    action = Action.Send2Block;
                    return(scbytes);
                }
                return(null);
            }
        }
コード例 #25
0
        private void messageReceivedFromBlock(byte[] message, SocketAsyncEventArgs saea)
        {
            if (log.IsDebugEnabled)
            {
                var receivedData = Encoding.ASCII.GetString(message);
                log.Debug("--- messageReceivedFromBlock --- " + receivedData);
            }

            SocketGroup socketGroup = (saea.UserToken as DataHoldingUserToken).socketGroup;

            if (Settings.Default.PureRetranslate)
            {
                string filename         = Path.Combine(appPath, "purelog"); //((IPEndPoint)saea.AcceptSocket.RemoteEndPoint).Address.ToString();
                var    fs               = new FileStream(filename, FileMode.Append);
                string messageHead      = "^device:";
                var    messageHeadBytes = Encoding.ASCII.GetBytes(messageHead);
                fs.Write(messageHeadBytes, 0, messageHeadBytes.Length);
                fs.Write(message, 0, message.Length);

                var lineEnd      = "\r\n";
                var lineEndBytes = Encoding.ASCII.GetBytes(lineEnd);
                fs.Write(lineEndBytes, 0, lineEndBytes.Length);

                fs.Close();

                if (socketGroup.monSendSAEA == null)
                {
                    connectMon(socketGroup);
                }
                monConnector.startSend(socketGroup.monSendSAEA, message);
            }
            else
            {
                string imei;
                Action action;
                byte[] processedBytes = receivePacketProcessor.processMessage(message, out imei, socketGroup, out action);

                if (processedBytes == null)
                {
                    blocksAcceptor.closeSocket(socketGroup.blockReceiveSAEA);
                    if (socketGroup.monSendSAEA != null)
                    {
                        monConnector.closeSocket(socketGroup.monSendSAEA);
                    }
                    return;
                }

                if (action == Action.Send2Block)
                {
                    messageReceivedFromMon(processedBytes, saea);
                }
                else
                {
                    if (imei != null && socketGroup.IMEI == null)
                    {
                        socketGroup.IMEI = imei;
                    }

                    if (socketGroup.monSendSAEA == null)
                    {
                        connectMon(socketGroup);
                    }
                    monConnector.startSend(socketGroup.monSendSAEA, processedBytes);

                    // mon2
                    if (Settings.Default.Mon2_Enabled && (Settings.Default.Mon2_Allboards || mon2Imeis.Contains(imei)))
                    {
                        if (socketGroup.mon2SendSAEA == null)
                        {
                            connectMon2(socketGroup);
                        }

                        if (Settings.Default.Mon2_Format)
                        {
                            mon2Connector.startSend(socketGroup.mon2SendSAEA, processedBytes);
                        }
                        else
                        {
                            mon2Connector.startSend(socketGroup.mon2SendSAEA, message);
                        }
                    }
                }
            }
        }