예제 #1
0
        public void Send(Message msg)
        {
            Log("Send() " + msg.GetMessageHeader().GetMsgID().ToString());

            MessageHeader h = msg.GetMessageHeader();

            // Sunucu tarafı ise
            if (h.isServerSideCommand())
            {
                // Sunucu tarafı ama disk'e yaz işaretli.
                if (MessageAttribute.GetMessageAttribute(Message.GetTypeFromID(h.CommandID)).SaveToQueue)
                {
                    _sendQueue.Enqueue(msg, true);
                }
                else
                {
                    _sendQueue.Enqueue(msg, false);
                }
            }
            else
            {
                // Kullanıcı tarafı
                _sendQueue.Enqueue(msg, true);
            }
        }
예제 #2
0
        // private ACKList _ackList = new ACKList();
        private bool LoginAndWaitForAck(Message message)
        {
            Log("Login: "******"Login cevap gelmedi: timeout CommandID: " + message.GetMessageHeader().CommandID);
                DisposeSocket();
                return false;
            }
        }
예제 #3
0
        private bool SendAndWaitForAck(Message message)
        {
            Log("SendAndWaitForACK2: " + message.GetMessageHeader().CommandID + "," + message.GetMessageHeader().GetMsgID().ToString());

            // Gönderilen mesaj keep-alive ise onu bekle, aksi her durumda ACK2 bekle
            if (message.GetMessageHeader().CommandID == KEEP_ALIVE)
            {
                _waitFor = new PredefinedCommands.KeepAlive();
            }
            else
            {
                _waitFor = PredefinedCommands.Ack2.CreateAck2(message.GetMessageHeader());
            }

            try
            {
                // Gönder
                _socket.Send(message.Data, message.Size, SocketFlags.None);
            }
            catch
            {
                DisconnectInternal();
                return false;
            }

            // Bekle
            if (_waitForEvent.WaitOne(90000, false))
            {
                return true;
            }
            else
            {
                DisconnectInternal();
                return false;
            }
        }
예제 #4
0
        public void Send(Message m)
        {
            MessageHeader h = m.GetMessageHeader();

            // Sunucu tarafı ise
            if (h.isServerSideCommand())
            {
                // Sunucu tarafı ama disk'e yaz işaretli.
                if (MessageAttribute.GetMessageAttribute(Message.GetTypeFromID(h.CommandID)).SaveToQueue)
                {
                    _queue.Enqueue(m, true);
                }
                else
                {
                    _queue.Enqueue(m, false);
                }
            }
            else
            {
                // Kullanıcı tarafı
                _queue.Enqueue(m, true);
            }
        }
예제 #5
0
        private void AddToSendQueue(Message msg, bool writeToDisk)
        {
            MessageHeader header = msg.GetMessageHeader();
            UniqueID uid = header.GetMsgID();
            string filename = Path.Combine(_settings.SentFolder, uid.ToString() + ".msg");

            // Sunucu tarafını diske yazma.
            if ((msg.GetMessageHeader().CommandID == 23) || // Delete ise kaydet disk'e
                writeToDisk && msg.GetMessageHeader().CommandID >= 1024)
            {
                FileStream fs = File.Create(filename);
                fs.Write(msg.Data, 0, msg.Size);
                fs.Close();
            }

            _list.Enqueue(msg);
        }
예제 #6
0
 public void Send(Message msg)
 {
     AddToSendQueue(msg, true);
 }
예제 #7
0
 public static void SaveToFile(Message m, string filename)
 {
     FileStream fs = new FileStream(filename, FileMode.Create);
     fs.Write(m.Data, 0, m.Size);
     fs.Close();
 }