コード例 #1
0
        private void Instance_OnDisconnect(IPOCS.Client client)
        {
            var clientModel = Clients.FirstOrDefault(c => c.Client == client);

            Clients.Remove(clientModel);
            Log.Insert(0, $"{DateTime.Now.ToUniversalTime()} : {client.Name} disconnected.");
        }
コード例 #2
0
        private void Instance_OnConnect(IPOCS.Client client)
        {
            var concentrator = MainViewModel.YardEditorViewModel.Concentrators.FirstOrDefault((c) => c.Name == client.Name);

            Clients.Add(new ClientViewModel(client, concentrator));
            Log.Insert(0, $"{DateTime.Now.ToUniversalTime()} : {client.Name} connected.");
        }
コード例 #3
0
        private bool?Instance_OnConnectionRequest(IPOCS.Client client, IPOCS.Protocol.Packets.ConnectionRequest request)
        {
            var concentrator = MainViewModel.YardEditorViewModel.Concentrators.FirstOrDefault((c) => c.Name == client.Name);

            if (concentrator == null)
            {
                Log.Insert(0, $"{DateTime.Now.ToUniversalTime()} : Unable to locate {client.Name} - forcing disconnect.");
                return(false);
            }
            List <byte> vector;

            try
            {
                vector = concentrator.Serialize();
            }
            catch (NullReferenceException)
            {
                Log.Insert(0, $"{DateTime.Now.ToUniversalTime()} : Serialization for {client.Name} site data failed.");
                return(false);
            }

            ushort providedChecksum = ushort.Parse(request.RXID_SITE_DATA_VERSION);
            ushort computedChecksum = IPOCS.CRC16.Calculate(vector.ToArray());

            Log.Insert(0, $"{DateTime.Now.ToUniversalTime()} : ({client.Name}) R.CRC: {request.RXID_SITE_DATA_VERSION}, C.CRC: {computedChecksum}");
            if (providedChecksum == 0 || computedChecksum != providedChecksum)
            {
                var responseMsg = new IPOCS.Protocol.Message
                {
                    RXID_OBJECT = client.Name
                };
                responseMsg.packets.Add(new IPOCS.Protocol.Packets.ApplicationData
                {
                    RNID_XUSER = 0x0001,
                    PAYLOAD    = vector.ToArray()
                });
                client.Send(responseMsg);
                return(false);
            }
            return(true);
        }