Esempio n. 1
0
        protected override bool RecvInternalMessage(RemoteID remote, PackInternal pkID, CMessage msgData, CPackOption op)
        {
            switch (pkID)
            {
            case PackInternal.ePID_CS_Test:
            {
                int    aa;
                string ss;
                Marshaler.Read(msgData, out aa);
                Marshaler.Read(msgData, out ss);
                if (message_handler != null)
                {
                    message_handler(MsgType.Debug, op.m_pack_mode + ", InterPkt: " + pkID + ", " + aa + ", " + ss);
                }
            }
            break;

            default:
            {
                // test
            }
                return(false);
            }
            return(true);
        }
Esempio n. 2
0
 public void From(RemoteID in_remote, CMessage in_msg, PacketType in_pkID, CPackOption in_op)
 {
     this.remote = in_remote;
     this.msg    = in_msg;
     this.pkID   = in_pkID;
     this.pkop   = in_op;
 }
Esempio n. 3
0
        public void Read(out RemoteID p)
        {
            Int32 data;

            Read(out data);
            p = (RemoteID)data;
        }
Esempio n. 4
0
 public static void FreeRemotePool(RemoteID remote)
 {
     if ((int)remote >= 0)
     {
         remotePool.Add((int)remote);
     }
 }
Esempio n. 5
0
        public bool PacketSend(RemoteID remote, CPackOption pko, CMessage sMsg)
        {
            if (this.owner == null)
            {
                return(false);
            }

            return(owner.Send(remote, sMsg, pko));
        }
Esempio n. 6
0
 public CPackOption(Protocol8 prot, PacketMode8 mode)
 {
     m_Dummy     = 0;
     m_remote    = RemoteID.Remote_None;
     m_from      = RemoteID.Remote_None;
     m_protocol  = prot;
     m_pack_mode = mode;
     m_dmy_ex1   = PackExtra.Ex_None;
     m_dmy_ex2   = PackExtra.Ex_None;
 }
Esempio n. 7
0
 public PackExtra m_dmy_ex2;   // 확장옵션2
 public CPackOption()
 {
     m_Dummy     = 0;
     m_remote    = RemoteID.Remote_None;
     m_from      = RemoteID.Remote_None;
     m_protocol  = Protocol8.Protocol_Tcp;
     m_pack_mode = PacketMode8.PM_None;
     m_dmy_ex1   = PackExtra.Ex_None;
     m_dmy_ex2   = PackExtra.Ex_None;
 }
Esempio n. 8
0
        public T GetRemoteClient(RemoteID remote)
        {
            IRemoteClient client = null;

            lock (sync_obj)
            {
                if (RemoteClients.TryGetValue(remote, out client) == false)
                {
                    return((T)client);
                }
            }
            return((T)client);
        }
Esempio n. 9
0
        /// <summary>
        /// 클라이언트가 Connect됬을때 가장 먼저 호출해줘야 함
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public RemoteID OnConnect(ref T session)
        {
            RemoteID remote = RemotePool.GetRemotePool();

            if (remote == RemoteID.Remote_None)
            {
                if (message_handler != null)
                {
                    message_handler(MsgType.Critical, "remotePool Empty!");
                }
            }

            lock (sync_obj)
            {
                if (RemoteClients.ContainsKey(remote))
                {
                    if (message_handler != null)
                    {
                        message_handler(MsgType.Warning,
                                        "remote key 중복되어 반복루프시작함... (멀티스레드 서버에서 close된상태에서 남은recv처리가 존재할경우 발생될수있음)");
                    }
                    while (true)
                    {
                        RemotePool.FreeRemotePool(remote);      // 기존 중복된것을 사용안했으니 바로 반환한다음..
                        remote = RemotePool.GetRemotePool();    // 다시 하나 가져오고..
                        if (RemoteClients.ContainsKey(remote) == false)
                        {
                            break;
                        }
                    }
                }
                RemoteClients.Add(remote, (IRemoteClient)session);
            }

            // 내부패킷 보내기
            CMessage    sMsg       = new CMessage();
            CPackOption sendOption = CPackOption.Basic;

            sMsg.WriteStart(PacketType.PacketType_Internal, sendOption);
            Marshaler.Write(sMsg, PackInternal.ePID_SC_Remote);
            Marshaler.Write(sMsg, remote);
            SendToClient(remote, (IRemoteClient)session, sMsg, sendOption);   // remote를 별도로 보내는 이유는 이함수가 리턴되야 session의 remote가 갱신되므로..

            return(remote);
        }
Esempio n. 10
0
        public override bool Send(RemoteID remote, CMessage msg, CPackOption op)
        {
            //IRemoteClient client = null;
            //lock (sync_obj)
            //{
            //    if (RemoteClients.TryGetValue(remote, out client) == false)
            //    {
            //        return false;
            //    }
            //}
            IRemoteClient client = (IRemoteClient)GetRemoteClient(remote);

            if (client != null)
            {
                SendToClient(remote, client, msg, op);
            }
            return(true);
        }
Esempio n. 11
0
        protected void PreparePacket(RemoteID remote, RemoteID from, CMessage msg, CPackOption op)
        {
            if (op.m_pack_mode == PacketMode8.PM_Encrypt_Mode)
            {
                msg.Encrypt();
            }

            // remote target처리
            Int32 remote_target = (Int32)remote;

            byte[] temp_remote = BitConverter.GetBytes(remote_target);
            temp_remote.CopyTo(msg.buffer, 4);      // CPackOption의 순서에 따라 정확한 위치에 덮어써준다

            // remote from
            Int32 remote_from = (Int32)from;

            temp_remote = BitConverter.GetBytes(remote_from);
            temp_remote.CopyTo(msg.buffer, 8);     // CPackOption의 순서에 따라 정확한 위치에 덮어써준다
        }
Esempio n. 12
0
        protected override bool RecvInternalMessage(RemoteID remote, PackInternal pkID, CMessage msgData, CPackOption op)
        {
            switch (pkID)
            {
            case PackInternal.ePID_SC_Remote:
            {
                RemoteID _remote;
                Marshaler.Read(msgData, out _remote);
                remoteID = _remote;
                OnReadyClient();
            }
            break;

            default:
            {
                // test
            }
                return(false);
            }
            return(true);
        }
Esempio n. 13
0
        // 더이상사용안함
        //public void Send(ZNet.CPacket pk)
        //{
        //    m_client.DoSend(pk);
        //}

        public override bool Send(RemoteID remote, CMessage msg, CPackOption op)
        {
            PreparePacket(remote, RemoteID.Remote_Client, msg, op);
            m_client.DoSend(CPacket.create(msg));
            return(true);
        }
Esempio n. 14
0
 public void SendToClient(RemoteID remote, IRemoteClient client, CMessage msg, CPackOption op)
 {
     PreparePacket(remote, RemoteID.Remote_Server, msg, op);
     client.SendToRemote(CPacket.create(msg));
 }
Esempio n. 15
0
 public static void Write(CMessage msg, RemoteID p)
 {
     msg.Write(p);
 }
Esempio n. 16
0
 public NetAddress(RemoteID _remote, string _host, int _port)
 {
     m_remote = _remote;
     m_host   = _host;
     m_port   = _port;
 }
Esempio n. 17
0
 public static void Read(CMessage msg, out RemoteID p)
 {
     msg.Read(out p);
 }
Esempio n. 18
0
        /// <summary>
        /// Add or remove the star from this message on the server.
        /// </summary>
        private void StarMessage()
        {
            Folder folder = Topic;

            if (Starred)
            {
                StarAdd addStar = new StarAdd
                {
                    Forum = Topic.ParentFolder.Name,
                    Topic = folder.Name,
                    MsgID = RemoteID.ToString(CultureInfo.InvariantCulture)
                };
                LogFile.WriteLine("Adding star to message {0} in {1}/{2}", addStar.MsgID, addStar.Forum, addStar.Topic);

                try
                {
                    HttpWebRequest postUrl        = APIRequest.Post("starred/add", APIRequest.APIFormat.XML, addStar);
                    string         responseString = APIRequest.ReadResponseString(postUrl);

                    if (responseString.Contains("Success"))
                    {
                        LogFile.WriteLine("Star successfully added");
                    }
                    else
                    {
                        LogFile.WriteLine("Failed to add star to message {0} : {1}", RemoteID, responseString);
                    }
                }
                catch (Exception e)
                {
                    CIX.ReportServerExceptions("CIXMessage.StarMessage", e);
                }
                StarPending = false;
                lock (CIX.DBLock)
                {
                    CIX.DB.Update(this);
                }
            }
            else
            {
                string forumName = FolderCollection.EncodeForumName(Topic.ParentFolder.Name);
                string starUrl   = string.Format("starred/{0}/{1}/{2}/rem", forumName, Topic.Name, RemoteID);

                LogFile.WriteLine("Removing star from message {0} in {1}/{2}", RemoteID, forumName, Topic.Name);

                try
                {
                    HttpWebRequest getRequest     = APIRequest.Get(starUrl, APIRequest.APIFormat.XML);
                    string         responseString = APIRequest.ReadResponseString(getRequest);

                    if (responseString.Contains("Success"))
                    {
                        LogFile.WriteLine("Star successfully removed");
                    }
                    else
                    {
                        LogFile.WriteLine("Failed to remove star for message {0} : {1}", RemoteID, responseString);
                    }
                }
                catch (Exception e)
                {
                    CIX.ReportServerExceptions("CIXMessage.StarMessage", e);
                }
                if (StarPending)
                {
                    StarPending = false;
                    lock (CIX.DBLock)
                    {
                        CIX.DB.Update(this);
                    }
                }
            }
        }
Esempio n. 19
0
 public virtual bool Send(RemoteID remote, CMessage msg, CPackOption op)
 {
     return(false);
 }
Esempio n. 20
0
        public void Write(RemoteID p)
        {
            Int32 data = (Int32)p;

            Write(data);
        }
Esempio n. 21
0
 public override int Read(byte[] data, int start, int length)
 {
     return(EncryptedStream.Read(data, start, length, RemoteID.GetBytes()));
 }
Esempio n. 22
0
 protected virtual bool RecvInternalMessage(RemoteID remote, PackInternal pkID, CMessage msgData, CPackOption op)
 {
     return(false);
 }