private void regResult(SocketModelPB model) { CommonResp resp = CommonResp.ParseFrom(model.Content); CommonResp.Types.RespCode result = resp.Code; switch (result) { case CommonResp.Types.RespCode.SUCCESS: ClientDataUtil.warnings.Add("注册成功"); SendMessage("regCannel"); break; case CommonResp.Types.RespCode.REGISTER_ACCOUNT_ALREADY_EXISTS: ClientDataUtil.warnings.Add("帐号已存在,注册失败"); SendMessage("regClick"); break; case CommonResp.Types.RespCode.REGISTER_ACCOUNT_NAME_ILLEGAL: ClientDataUtil.warnings.Add("帐号不合法,注册失败"); SendMessage("regClick"); break; case CommonResp.Types.RespCode.REGISTER_ACCOUNT_PASSWORD_ILLEGAL: ClientDataUtil.warnings.Add("密码不合法,注册失败"); SendMessage("regClick"); break; } }
private void loginResult(SocketModelPB model) { CommonResp resp = CommonResp.ParseFrom(model.Content); CommonResp.Types.RespCode result = resp.Code; switch (result) { case CommonResp.Types.RespCode.LOGIN_ACCOUNT_UNEXIST: ClientDataUtil.warnings.Add("帐号不存在,登录失败"); break; case CommonResp.Types.RespCode.LOGIN_PASSWORD_ERROR: ClientDataUtil.warnings.Add("密码错误,登录失败"); break; case CommonResp.Types.RespCode.LOGIN_ACCOUNT_ALREADY_ONLINE: ClientDataUtil.warnings.Add("帐号已登录,登录失败"); break; default: //TODO 登录成功 跳转到角色选择场景 SendMessage("loading", 1); break; } }
void messageReceived(SocketModelPB model) { //判断一级协议 确定当前消息属于哪个模块 switch (model.Type) { case Protocol.TYPE_LOGIN: //登录模块 login.messageReceived(model); break; } }
public void messageReceived(SocketModelPB model) { switch (model.Command) { case LoginProtocol.LOGIN_SRES: loginResult(model); break; case LoginProtocol.CREATE_ACCOUNT_SRES: regResult(model); break; } }
private void onData() { CodedInputStream stream = CodedInputStream.CreateInstance(ioBuff.ToArray()); if (stream.IsAtEnd) { isRead = false; return; } // 读取头信息转为int,为body的长度 int dataSize; try { dataSize = (int)stream.ReadRawVarint32(); } catch (Exception e) { // 读header失败,有可能是消息不完整,需要等待下一个消息。 isRead = false; return; } int headerSize = (int)stream.Position; // 判断是否已经读到一次完整的信息 if (dataSize > ioBuff.Count - headerSize) { //body长度不够 等待下个消息的到来 isRead = false; return; } // 解析消息体 byte[] msg = stream.ReadRawBytes(dataSize); SocketModelPB socketMsg = SocketModelPB.ParseFrom(msg); messageList.Add(socketMsg); //从消息数组中去掉已经解析完成的数据,保留缓存区的剩余数据 ioBuff.RemoveRange(0, headerSize + dataSize); onData(); }
public void write(int type, int area, int command, ByteString contentMsg) { SocketModelPB.Builder builder = SocketModelPB.CreateBuilder(); builder.SetArea(area); builder.SetType(type); builder.SetCommand(command); builder.SetContent(contentMsg); SocketModelPB msg = builder.Build(); MemoryStream stream = new MemoryStream(); CodedOutputStream outStream = CodedOutputStream.CreateInstance(stream); outStream.WriteMessageNoTag(msg); outStream.Flush(); try { socket.Send(stream.ToArray()); } catch { Debug.LogError("网络错误,请重新登录"); } }