Пример #1
0
        private static void FswSend(Program.AppMessage msg, int lParam)
        {
            FswEnsurePaths();

            IpcMessage ipcMsg = new IpcMessage();

            byte[] pbID = CryptoRandom.Instance.GetRandomBytes(8);
            ipcMsg.ID      = MemUtil.BytesToUInt64(pbID);
            ipcMsg.Time    = DateTime.UtcNow.ToBinary();
            ipcMsg.Message = msg;
            ipcMsg.LParam  = lParam;

            // Send just to others, not to own
            m_vProcessedMsgs.Add(ipcMsg);

            for (int r = 0; r < IpcComRetryCount; ++r)
            {
                try
                {
                    List <IpcMessage> l = ReadMessagesPriv();
                    CleanOldMessages(l);
                    l.Add(ipcMsg);

                    MemoryStream ms = new MemoryStream();
                    BinaryWriter bw = new BinaryWriter(ms);
                    bw.Write(IpcFileSig);
                    bw.Write((uint)l.Count);
                    for (int j = 0; j < l.Count; ++j)
                    {
                        IpcMessage.Serialize(bw, l[j]);
                    }
                    byte[] pbPlain = ms.ToArray();
                    bw.Close();
                    ms.Close();

                    byte[] pbFile = ProtectedData.Protect(pbPlain, IpcOptEnt,
                                                          DataProtectionScope.CurrentUser);

                    FileStream fsWrite = new FileStream(m_strMsgFilePath,
                                                        FileMode.Create, FileAccess.Write, FileShare.None);
                    fsWrite.Write(pbFile, 0, pbFile.Length);
                    fsWrite.Close();

                    break;
                }
                catch (Exception) { }

                Thread.Sleep(IpcComRetryDelay);
            }

            CleanOldMessages(m_vProcessedMsgs);
        }