Пример #1
0
 private void QueueCommand(CCBNetworkerCommandData cmd)
 {
     lock (m_commandList)
     {
         m_commandList.Enqueue(cmd);
         m_cmdSignal.Set();
     }
 }
Пример #2
0
        private CCBNetworkerCommandData GetCommand()
        {
            try
            {
                lock (m_commandList)
                {
                    if (0 < m_commandList.Count)
                    {
                        CCBNetworkerCommandData cmd = m_commandList.Dequeue();

                        return(cmd);
                    }
                }
            }
            catch (InvalidOperationException eex)
            {
                Error("Internal error: trying to get command while command list is empty." + eex.Message);
            }
            catch (Exception ex)
            {
                Error(string.Format("Error getting command: {0}", ex.Message));
            }
            return(new CCBNetworkerCommandData(CCBNetworkerCommand.nwc_none));
        }
Пример #3
0
 public CCBNetworkerCommandData(CCBNetworkerCommandData rhs)
 {
     m_cmd   = rhs.m_cmd;
     m_data  = rhs.m_data;
     m_oSend = null;
 }
Пример #4
0
        private void ExecuteNextCommand()
        {
            try
            {
                CCBNetworkerCommandData cmd = GetCommand();

                switch (cmd.m_cmd)
                {
                case CCBNetworkerCommand.nwc_connect:
                    Connect();
                    break;

                case CCBNetworkerCommand.nwc_disconnect:
                    m_working = false;
                    break;

                case CCBNetworkerCommand.nwc_post:
                    if (null != m_clientChannel)
                    {
                        System.Diagnostics.Debug.Assert((null != cmd.m_data) && (0 < cmd.m_data.Length));
                        if ((null != cmd.m_data) && (0 < cmd.m_data.Length))
                        {
                            m_clientChannel.ChatMessage(m_uid, cmd.m_data[0]);
                        }
                        else
                        {
                            Error("Internal error: m_data does not contain data.");
                        }
                    }
                    break;

                case CCBNetworkerCommand.nwc_pingMesh:
                    if (null != m_clientChannel)
                    {
                        m_clientChannel.PingAll(m_uid);
                    }
                    break;

                case CCBNetworkerCommand.nwc_pingRespond:
                    if (null != m_clientChannel)
                    {
                        m_clientChannel.OnUserConnected(m_uid);
                    }
                    break;

                case CCBNetworkerCommand.nwc_startFileTransfer:
                    if (null != m_clientChannel)
                    {
                        m_clientChannel.OnNewFile(m_uid, cmd.m_data[0], cmd.m_data[1]);
                    }
                    break;

                case CCBNetworkerCommand.nwc_requestFileTransfer:
                    if (null != m_clientChannel)
                    {
                        m_clientChannel.RequestFile(cmd.m_data[0], m_uid, cmd.m_data[1]);
                    }
                    break;

                case CCBNetworkerCommand.nwc_cancelFileTransfer:
                    if (null != m_clientChannel)
                    {
                        m_clientChannel.CancelFile(cmd.m_data[0], m_uid, cmd.m_data[1]);
                    }
                    break;

                case CCBNetworkerCommand.nwc_sendCharacter:
                    if (null != m_clientChannel)
                    {
                        CCBCharacter characterToSend = (CCBCharacter)cmd.m_oSend;

                        if (null != characterToSend)
                        {
                            m_clientChannel.SendCharacterTo(m_uid, cmd.m_data[0], characterToSend);
                        }
                        else
                        {
                            Error("P2PNetworker: No character object in nwc_sendCharacter command.");
                        }
                    }
                    break;

                default:
                    Error(string.Format("Networker: Ignoring {0} command.", cmd.m_cmd));
                    break;
                }
            }
            catch (NullReferenceException nex)
            {
                Error("Null reference in ExecuteNextCommand: " + nex.Message);
            }
            catch (Exception ex)
            {
                Error("Exception in ExecuteNextCommand: " + ex.Message);
            }
        }