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); }
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; }
public void Read(out RemoteID p) { Int32 data; Read(out data); p = (RemoteID)data; }
public static void FreeRemotePool(RemoteID remote) { if ((int)remote >= 0) { remotePool.Add((int)remote); } }
public bool PacketSend(RemoteID remote, CPackOption pko, CMessage sMsg) { if (this.owner == null) { return(false); } return(owner.Send(remote, sMsg, pko)); }
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; }
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; }
public T GetRemoteClient(RemoteID remote) { IRemoteClient client = null; lock (sync_obj) { if (RemoteClients.TryGetValue(remote, out client) == false) { return((T)client); } } return((T)client); }
/// <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); }
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); }
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의 순서에 따라 정확한 위치에 덮어써준다 }
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); }
// 더이상사용안함 //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); }
public void SendToClient(RemoteID remote, IRemoteClient client, CMessage msg, CPackOption op) { PreparePacket(remote, RemoteID.Remote_Server, msg, op); client.SendToRemote(CPacket.create(msg)); }
public static void Write(CMessage msg, RemoteID p) { msg.Write(p); }
public NetAddress(RemoteID _remote, string _host, int _port) { m_remote = _remote; m_host = _host; m_port = _port; }
public static void Read(CMessage msg, out RemoteID p) { msg.Read(out p); }
/// <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); } } } }
public virtual bool Send(RemoteID remote, CMessage msg, CPackOption op) { return(false); }
public void Write(RemoteID p) { Int32 data = (Int32)p; Write(data); }
public override int Read(byte[] data, int start, int length) { return(EncryptedStream.Read(data, start, length, RemoteID.GetBytes())); }
protected virtual bool RecvInternalMessage(RemoteID remote, PackInternal pkID, CMessage msgData, CPackOption op) { return(false); }