private uint Serialize(NpCloudRequestParameter data, uint uid, MemoryStream stream) { NpMessagePack.Pack <object>(data.content, stream); uint uid2 = this.GetUId(uid); byte[] bytes = BitConverter.GetBytes(uid2); if (BitConverter.IsLittleEndian) { Array.Reverse(bytes); } stream.Write(bytes, 0, bytes.Length); HMACSHA512 hmacsha = new HMACSHA512(Encoding.ASCII.GetBytes(this.HASH_KEY)); byte[] array = hmacsha.ComputeHash(stream.ToArray()); stream.SetLength(stream.Length - 4L); stream.Write(array, 0, array.Length); stream.Write(bytes, 0, bytes.Length); Dictionary <string, string> dictionary = new Dictionary <string, string>(); dictionary["data"] = Convert.ToBase64String(stream.ToArray()); data.content = new Dictionary <string, object> { { "param", dictionary } }; stream.Seek(0L, SeekOrigin.Begin); stream.SetLength(0L); NpMessagePack.Pack <object>(data, stream); return(uid2); }
private byte[] CreateSystemBuffer(NpCloudRequestParameter parameter, NpCloudHeaderType type) { MemoryStream memoryStream = new MemoryStream(); NpMessagePack.Pack <object>(parameter, memoryStream); return(this.AddHeaderBuffer(memoryStream.GetBuffer(), type)); }
public void OnMessage(object sender, MessageEventArgs e) { try { if (!this.mIsLogin) { int num = e.RawData.Length - 10; byte[] array = new byte[num]; Array.Copy(e.RawData, 10, array, 0, num); NpCloudResponseParameter <string> npCloudResponseParameter = NpMessagePack.Unpack <NpCloudResponseParameter <string> >(array); if (npCloudResponseParameter.body.IndexOf("200") < 0) { this.mIsError = true; this.mErrorMsg = "サーバーへの接続に失敗しました。"; } else { this.mIsLogin = true; } } else { this.Receive(e.RawData); } } catch (Exception ex) { this.mIsError = true; this.mErrorMsg = ex.Message + "\n" + ex.StackTrace; } }
private void messagePack(byte[] data) { Dictionary <string, object> dictionary = NpMessagePack.Unpack <Dictionary <string, object> >(data); if (dictionary.ContainsKey("response")) { Dictionary <string, object> ret = (Dictionary <string, object>)dictionary["response"]; this.SetOAuthResultData(ret, string.Empty); } else { this.SetOAuthResultData(dictionary, string.Empty); } }
protected byte[] CreateLoginParameter(NpCloudSetting setting, object option) { string[] array = setting.ProjectId.Split(new char[] { '.' }); string str = setting.ProjectId; if (array.Length > 1) { str = array[1]; } NpCloudRequestParameter npCloudRequestParameter = new NpCloudRequestParameter(); npCloudRequestParameter.content = new Dictionary <string, object> { { "projectId", setting.ProjectId }, { "projectPass", str + "pass" }, { "userId", setting.UserId } }; Dictionary <string, object> dictionary = new Dictionary <string, object>(); dictionary.Add("value", NpCloudCommandType.login.ToString()); if (option != null) { dictionary.Add("option", option); } npCloudRequestParameter.command = dictionary; npCloudRequestParameter.type = "direct"; MemoryStream memoryStream = new MemoryStream(); NpMessagePack.Pack <object>(npCloudRequestParameter, memoryStream); return(this.AddHeaderBuffer(memoryStream.GetBuffer(), NpCloudHeaderType.CommonMsg)); }
private void LoginResponse(int timeOut) { if (!this.mSocket.Poll(timeOut * 1000000, SelectMode.SelectRead)) { throw new NpCloudException(720, "接続リクエストのタイムアウトです。"); } byte[] array = new byte[1024]; this.mSocket.Receive(array); int num = array.Length - 10; byte[] array2 = new byte[num]; Array.Copy(array, 10, array2, 0, num); NpCloudResponseParameter <string> npCloudResponseParameter = NpMessagePack.Unpack <NpCloudResponseParameter <string> >(array2); if (npCloudResponseParameter.body.IndexOf("200") < 0) { throw new NpCloudException(721, "サーバーへの接続に失敗しました。"); } }
public T Deserialize <T>(string buffer) where T : class { if (buffer == null || buffer.Equals(string.Empty)) { throw new NpCloudException(780, "データが存在しませんでした。"); } byte[] array = Convert.FromBase64String(buffer); int num = array.Length - 64; byte[] array2 = new byte[64]; byte[] array3 = new byte[num]; Array.Copy(array, num, array2, 0, 64); Array.Copy(array, array3, num); HMACSHA512 hmacsha = new HMACSHA512(Encoding.ASCII.GetBytes(this.HASH_KEY)); string text = BitConverter.ToString(hmacsha.ComputeHash(array3)); string value = BitConverter.ToString(array2); if (!text.Equals(value)) { throw new NpCloudException(781, "ハッシュの値が違います、改ざんされている可能性があります。"); } return(NpMessagePack.Unpack <T>(array3)); }
private T ReceiveAction <T>(byte[] tmpBuffer) where T : class { return(NpMessagePack.Unpack <T>(tmpBuffer)); }
public void Update() { byte[] array = null; while (this.SocketInstance != null) { NPCloudReceiveParameter <NPCloudReceiveHashParaemter> requestParameter = this.SocketInstance.GetRequestParameter <NPCloudReceiveParameter <NPCloudReceiveHashParaemter> >(out array); if (requestParameter == null || array == null) { break; } string[] array2 = requestParameter.command.Split(new char[] { ':' }); NPCloudReceiveParameter <NpCloudVenusErrorParameter> npcloudReceiveParameter = NpMessagePack.Unpack <NPCloudReceiveParameter <NpCloudVenusErrorParameter> >(array); NpCloudErrorData npCloudErrorData = new NpCloudErrorData(); npCloudErrorData.command = array2[1]; npCloudErrorData.resultCode = requestParameter.resultCode; npCloudErrorData.resultMsg = requestParameter.resultMsg; npCloudErrorData.venus = npcloudReceiveParameter.body; if (requestParameter.resultCode == null || !requestParameter.resultCode.Equals("0")) { if (requestParameter.resultCode == "406") { throw new NpCloudException(712, requestParameter.body.shardingServ); } for (int i = 0; i < this.mListenerlist.Count; i++) { if (this.mListenerlist[i].ReceiveException(npCloudErrorData)) { } } this.mListener.OnRequestException(npCloudErrorData); } object receiveData = null; string text = array2[1]; if (text == null) { goto IL_2EA; } if (NpCloudManager.< > f__switch$map0 == null) { NpCloudManager.< > f__switch$map0 = new Dictionary <string, int>(8) { { string.Empty, 0 }, { "9100", 1 }, { "9101", 1 }, { "9102", 1 }, { "9105", 1 }, { "9106", 1 }, { "9201", 2 }, { "9202", 3 } }; } int num; if (!NpCloudManager.< > f__switch$map0.TryGetValue(text, out num)) { goto IL_2EA; } switch (num) { case 0: if (array2[0].Equals(NpCloudValueType.send.ToString())) { NPCloudReceiveParameter <Dictionary <string, object> > npcloudReceiveParameter2 = NpMessagePack.Unpack <NPCloudReceiveParameter <Dictionary <string, object> > >(array); this.mListener.OnResponse((int)npcloudReceiveParameter2.sender, npcloudReceiveParameter2.body); } else if (array2[0].Equals(NpCloudValueType.finduser.ToString())) { NPCloudReceiveParameter <NpCloudReceiveFindUserParameter> npcloudReceiveParameter3 = NpMessagePack.Unpack <NPCloudReceiveParameter <NpCloudReceiveFindUserParameter> >(array); List <string> on = npcloudReceiveParameter3.body.on; if (NpCloudManager.< > f__mg$cache0 == null) { NpCloudManager.< > f__mg$cache0 = new Converter <string, int>(int.Parse); } List <int> on2 = on.ConvertAll <int>(NpCloudManager.< > f__mg$cache0); List <string> off = npcloudReceiveParameter3.body.off; if (NpCloudManager.< > f__mg$cache1 == null) { NpCloudManager.< > f__mg$cache1 = new Converter <string, int>(int.Parse); } List <int> off2 = off.ConvertAll <int>(NpCloudManager.< > f__mg$cache1); this.mListener.OnFindUser(on2, off2); } continue; case 1: receiveData = this.SocketInstance.Deserialize <NpCloudReceiveRoomParameter>(requestParameter.body.data); break; case 2: receiveData = NpMessagePack.Unpack <NPCloudReceiveParameter <string> >(array); break; case 3: receiveData = NpMessagePack.Unpack <NPCloudReceiveParameter <List <RoomMsgLog> > >(array); break; case 4: goto IL_2EA; default: goto IL_2EA; } IL_30C: for (int j = 0; j < this.mListenerlist.Count; j++) { if (this.mListenerlist[j].Receive(array2[1], receiveData, requestParameter.resTime)) { } } continue; IL_2EA: NPCloudReceiveParameter <Dictionary <string, object> > npcloudReceiveParameter4 = NpMessagePack.Unpack <NPCloudReceiveParameter <Dictionary <string, object> > >(array); this.mListener.OnCtrlResponse(array2[1], npcloudReceiveParameter4.body); goto IL_30C; } }