public virtual void Handle(object data) { MessageSessionData sessionData = data as MessageSessionData; if (sessionData != null) { Session session = sessionData.Session; string message = sessionData.Message; byte[] bytes = sessionData.Data; if (session != null && message != null && message.Length > 0) { T msg = WebMessage.ToJsonObject <T>(message); if (msg != null) { if (bytes == null || bytes.Length <= 0) { ProcessMessage(session, msg); } else { ProcessMessage(session, msg, bytes); } } } } }
protected virtual bool ProcessMessage(MessageSessionData data) { if (data == null) { return(false); } string message = data.Message; if (message != null && message.Length > 0) { JsonMessage msg = WebMessage.ToJsonObject <JsonMessage>(message); if (msg != null && msg.MessageName != null && msg.MessageName.Length > 0) { IMessageHandler handler = GetHandler(msg.MessageName); if (handler != null) { handler.Handle(data); return(true); } } } return(false); }
protected virtual MessageSessionData GetSessionData(Session session, object data) { MessageSessionData result = null; if (data is string) { result = new MessageSessionData(session, data as string); } else if (data is byte[]) { Byte[] bytes = data as byte[]; int len = bytes.Length; int last = len - 4; int bodylen = -1; for (int i = 0; i <= last; i++) { if (bytes[i] == 0 && bytes[i + 1] == 0 && bytes[i + 2] == 0 && bytes[i + 3] == 0) { bodylen = last - i; break; } } if (bodylen >= 0) { byte[] body = new byte[bodylen]; string message = Encoding.UTF8.GetString(bytes, 0, len - bodylen - 4); if (bodylen > 0) { Buffer.BlockCopy(bytes, len - bodylen - 4, body, 0, bodylen); } result = new MessageSessionData(session, message, body); } } return(result); }
protected virtual bool ProcessMessage(MessageSessionData data) { if (data == null) return false; string message = data.Message; if (message != null && message.Length > 0) { JsonMessage msg = WebMessage.ToJsonObject<JsonMessage>(message); if (msg != null && msg.MessageName != null && msg.MessageName.Length > 0) { IMessageHandler handler = GetHandler(msg.MessageName); if (handler != null) { handler.Handle(data); return true; } } } return false; }
protected virtual MessageSessionData GetSessionData(Session session, object data) { MessageSessionData result = null; if (data is string) result = new MessageSessionData(session, data as string); else if (data is byte[]) { Byte[] bytes = data as byte[]; int len = bytes.Length; int last = len - 4; int bodylen = -1; for (int i = 0; i <= last; i++) { if (bytes[i] == 0 && bytes[i + 1] == 0 && bytes[i + 2] == 0 && bytes[i + 3] == 0) { bodylen = last - i; break; } } if (bodylen >= 0) { byte[] body = new byte[bodylen]; string message = Encoding.UTF8.GetString(bytes, 0, len - bodylen - 4); if (bodylen > 0) Buffer.BlockCopy(bytes, len - bodylen - 4, body, 0, bodylen); result = new MessageSessionData(session, message, body); } } return result; }