Exemplo n.º 1
0
        public void OnSendChatRsp(uint iMessageType, object kParam)
        {
            NetworkMessageParam param = kParam as NetworkMessageParam;
            SendChatRsp         rsp   = param.rsp as SendChatRsp;

            Log4U.LogDebug(rsp.resultCode);
            if (rsp.resultCode == SendChatRsp.ResultCode.SUCCESS)
            {
                if (_waitSendChatDict.ContainsKey(param.msgID))
                {
                    SendChatReq req = param.req as SendChatReq;
                    _waitSendChatDict[param.msgID].isSend = true;
                    _waitSendChatDict.Remove(param.msgID);
                }
                MessageDispatcher.GetInstance().DispatchMessage((uint)EUIMessage.UPDATE_SEND_CHAT);
            }
            else
            {
                if (_waitSendChatDict.ContainsKey(param.msgID))
                {
                    SendChatReq req = param.req as SendChatReq;
                    _waitSendChatDict[param.msgID].isSend = false;
                    _waitSendChatDict.Remove(param.msgID);
                }
                MessageDispatcher.GetInstance().DispatchMessage((uint)EUIMessage.UPDATE_SEND_CHAT);
            }
        }
Exemplo n.º 2
0
        public void OnLoginRsp(uint iMessageType, object kParam)
        {
            LoginRsp rsp = kParam as LoginRsp;

            Log4U.LogDebug(rsp.resultCode);
            if (rsp.resultCode == LoginRsp.ResultCode.SUCCESS)
            {
                _isLogin = true;

                GetPersonalInfoReq req = new GetPersonalInfoReq
                {
                    friendInfo = true,
                    userInfo   = true,
                    groupInfo  = true,
                };
                NetworkManager.GetInstance().SendPacket <GetPersonalInfoReq>(ENetworkMessage.GET_PERSONALINFO_REQ, req);

                PlayerPrefs.SetString(GlobalVars.PREF_USER_ID, _userId);
                PlayerPrefs.SetString(GlobalVars.PREF_USER_PASSWORD, _userPassword);

                CreateDir();
            }
            else
            {
                DoLogOut();
            }
        }
Exemplo n.º 3
0
        private IEnumerator BeginSendPacket <T>(ENetworkMessage networkMessage, T packet, uint timeoutMessage, byte[] msgIDBytes) where T : global::ProtoBuf.IExtensible
        {
            string msgID = BitConverter.ToString(msgIDBytes);

            lock (_msgIDDict)
            {
                _msgIDDict.Add(BitConverter.ToString(msgIDBytes), packet);
            }

            Log4U.LogInfo("Send : " + networkMessage + " msgID : " + msgID);

            DoBeginSendPacket <T>(networkMessage, packet, msgIDBytes);
            yield return(new WaitForSeconds(REQ_TIME_OUT));

            lock (_msgIDDict)
            {
                if (_msgIDDict.ContainsKey(msgID))
                {
                    RemoveMsgID(msgID);

                    NetworkMessageParam param = new NetworkMessageParam
                    {
                        msgID = msgID,
                        req   = packet,
                    };
                    MessageDispatcher.GetInstance().DispatchMessage(timeoutMessage, param);
                    DialogManager.GetInstance().CreateSingleButtonDialog("Send Packet Type : " + networkMessage + " msgID : " + msgID + " timeout ");
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 协议格式:
        /// SIZE : 4 | TYPE : 4 | MsgID : 4 | PACKET : dynamic
        /// </summary>
        /// <typeparam name="T">向服务器发送的packet的类型</typeparam>
        /// <param name="networkMessage">向服务器发送的请求的类型</param>
        /// <param name="packet">向服务器发送的packet</param>
        private void DoBeginSendPacket <T>(ENetworkMessage networkMessage, T packet, byte[] msgID) where T : global::ProtoBuf.IExtensible
        {
            try
            {
                byte[] sendBuffer = new byte[_socket.SendBufferSize];

                MemoryStream streamForProto = new MemoryStream();
                Serializer.Serialize <T>(streamForProto, packet);
                int bufferSize = HEAD_SIZE * HEAD_NUM + (int)streamForProto.Length;

                byte[] bufferSizeBytes     = MiniConverter.IntToBytes(bufferSize);
                byte[] networkMessageBytes = MiniConverter.IntToBytes((int)networkMessage);

                Array.Copy(bufferSizeBytes, 0, sendBuffer, HEAD_SIZE * 0, HEAD_SIZE);
                Array.Copy(networkMessageBytes, 0, sendBuffer, HEAD_SIZE * 1, HEAD_SIZE);
                Array.Copy(msgID, 0, sendBuffer, HEAD_SIZE * 2, HEAD_SIZE);
                Array.Copy(streamForProto.ToArray(), 0, sendBuffer, HEAD_SIZE * HEAD_NUM, streamForProto.Length);
                lock (_socket)
                {
                    if (_socket != null && _socket.Connected)
                    {
                        _socket.BeginSend(sendBuffer, 0, bufferSize, SocketFlags.None, new AsyncCallback(EndSendPacket), null);
                    }
                }
                streamForProto.Dispose();
            }
            catch (ObjectDisposedException)
            {
                Log4U.LogInfo("Send Closed");
            }
            catch (Exception ex)
            {
                Log4U.LogError(ex.Message);
            }
        }
Exemplo n.º 5
0
 private void CloseConnection()
 {
     if (_socket != null)
     {
         if (_socket.Connected)
         {
             _socket.Shutdown(SocketShutdown.Both);
             Log4U.LogInfo("Client Close...");
         }
         _socket.Close();
     }
 }
Exemplo n.º 6
0
        public void OnChangeGroupSync(uint iMessageType, object kParam)
        {
            ChangeGroupSync sync = kParam as ChangeGroupSync;

            if (_groupDict.ContainsKey(sync.groupItem.groupId))
            {
                _groupDict[sync.groupItem.groupId] = sync.groupItem;
            }
            else
            {
                _groupDict.Add(sync.groupItem.groupId, sync.groupItem);
            }
            Log4U.LogDebug("Changing");
        }
Exemplo n.º 7
0
 private void BeginReceivePacket()
 {
     try
     {
         lock (_socket)
         {
             _socket.BeginReceive(_receiveBuffer, 0, _socket.ReceiveBufferSize, SocketFlags.None, new AsyncCallback(EndReceivePacket), null);
         }
     }
     catch (Exception ex)
     {
         Log4U.LogError(ex.Message);
     }
 }
Exemplo n.º 8
0
        public void OnRegisterRsp(uint iMessageType, object kParam)
        {
            RegisterRsp rsp = kParam as RegisterRsp;

            Log4U.LogInfo(rsp.resultCode);
            if (rsp.resultCode == RegisterRsp.ResultCode.SUCCESS)
            {
                GlobalUser.GetInstance().TryLogin(_userID, _userPassword);
            }
            else
            {
                DialogManager.GetInstance().CreateSingleButtonDialog(rsp.resultCode.ToString());
                OnValueChangeRegisterInfo();
            }
        }
Exemplo n.º 9
0
        public override void Init()
        {
            Log4U.LogInfo("Client Running...");

            _msgIDDict = new Dictionary <string, IExtensible>();
            InitForcePushMessageType();
            InitNeedReqMessageType();

            MessageDispatcher.GetInstance().RegisterMessageHandler((uint)EModelMessage.SOCKET_CONNECTED, OnSocketConnected);
            MessageDispatcher.GetInstance().RegisterMessageHandler((uint)EModelMessage.SOCKET_DISCONNECTED, OnSocketDisConnected);
            MessageDispatcher.GetInstance().RegisterMessageHandler((uint)ENetworkMessage.KEEP_ALIVE_SYNC, OnKeepAliveSync);
            MessageDispatcher.GetInstance().RegisterMessageHandler((uint)EModelMessage.REQ_FINISH, OnReqFinish);

            MessageDispatcher.GetInstance().DispatchMessageAsync((uint)EModelMessage.SOCKET_DISCONNECTED, null);
        }
Exemplo n.º 10
0
 private void EndSendPacket(IAsyncResult ar)
 {
     //int bytesSend = 0;
     try
     {
         lock (_socket)
         {
             _socket.EndSend(ar);
         }
     }
     catch (Exception ex)
     {
         Log4U.LogError(ex.Message);
     }
 }
Exemplo n.º 11
0
        public void OnLoginRsp(uint iMessageType, object kParam)
        {
            LoginRsp rsp = kParam as LoginRsp;

            Log4U.LogInfo(rsp.resultCode);
            if (rsp.resultCode == LoginRsp.ResultCode.SUCCESS)
            {
                StateManager.GetInstance().ClearStates();
                StateManager.GetInstance().PushState <MainMenuPanel>(EUIType.MainMenuPanel);
            }
            else
            {
                DialogManager.GetInstance().CreateSingleButtonDialog(rsp.resultCode.ToString());
            }
        }
Exemplo n.º 12
0
        public static T DeserializeFromFile <T>(string filePath) where T : global::ProtoBuf.IExtensible
        {
            T item = default(T);

            using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read))
            {
                try
                {
                    item = Serializer.Deserialize <T>(fs);
                }catch (Exception ex)
                {
                    Log4U.LogError(ex);
                }
            }
            return(item);
        }
Exemplo n.º 13
0
        public void OnPersonalSetRsp(uint iMessageType, object kParam)
        {
            PersonalSettingsRsp rsp = kParam as PersonalSettingsRsp;

            Log4U.LogInfo(rsp.resultCode);

            if (rsp.resultCode == PersonalSettingsRsp.ResultCode.SUCCESS)
            {
                GetPersonalInfoReq req = new GetPersonalInfoReq
                {
                    userInfo = true,
                };

                NetworkManager.GetInstance().SendPacket <GetPersonalInfoReq>(ENetworkMessage.GET_PERSONALINFO_REQ, req);
            }
        }
Exemplo n.º 14
0
        public void SetImage(Image image, EAtlasName eAtlasName, string spriteName)
        {
            GameObject go = Resources.Load <GameObject>("Raw/Image/" + _atlasPathDict[eAtlasName] + "/" + spriteName);

            if (go != null)
            {
                try
                {
                    Sprite sprite = go.GetComponent <SpriteRenderer>().sprite;
                    image.sprite = sprite;
                }catch (System.NullReferenceException)
                {
                    Log4U.LogError(eAtlasName, spriteName);
                }
            }
        }
        private void UploadFile(string urlPath, string msgID, byte[] fileData, string mineType)
        {
            if (_uploadFileDict.ContainsKey(msgID))
            {
                throw new System.Exception(" uploading ");
            }

            WWWForm form = new WWWForm();

            form.AddBinaryData("fileUpload", fileData, "fileUpload", mineType);
            WWW uploadReq = new WWW(urlPath, form);

            _uploadFileDict.Add(msgID, uploadReq);

            Log4U.LogInfo(System.Convert.ToBase64String(form.data));

            StartCoroutine(DoUploadFile(msgID, uploadReq));
        }
Exemplo n.º 16
0
        /// <summary>
        /// 当无法接收到心跳包的时候尝试重新连接服务器
        /// </summary>
        /// <returns></returns>
        private IEnumerator BeginTryConnect()
        {
            yield return(null);

            while (_socket == null || !_socket.Connected || !_isKeepAlive)
            {
                Log4U.LogInfo("Begin Connect...");
                CloseConnection();
                yield return(StartCoroutine(BeginConnection()));
            }

            while (_isKeepAlive)
            {
                _isKeepAlive = false;
                yield return(new WaitForSeconds(KEEP_ALIVE_TIME_OUT));
            }

            MessageDispatcher.GetInstance().DispatchMessageAsync((uint)EModelMessage.SOCKET_DISCONNECTED, null);
        }
        private IEnumerator DoUploadFile(string msgID, WWW uploadReq)
        {
            yield return(uploadReq);

            _uploadFileDict.Remove(msgID);
            if (uploadReq.error != null)
            {
                Log4U.LogInfo("Error uploading file : " + msgID);
            }
            else
            {
                MessageDispatcher.GetInstance().DispatchMessage((uint)EModelMessage.UPLOAD_FINISH,
                                                                new FileTransferParam
                {
                    msgID = msgID,
                    www   = uploadReq,
                });
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// 对界面进行压栈
        /// </summary>
        /// <typeparam name="T">下一个界面的类型</typeparam>
        /// <param name="go">下一个界面对应的GameObject</param>
        /// <param name="param">需要传给下一个界面对应的压栈参数</param>
        private void PushState <T>(GameObject go, object param = null) where T : BaseState
        {
            T nextState = go.GetComponent <T>();

            nextState.OnEnter(param);

            if (_stateStack.Count != 0)
            {
                BaseState curState = _stateStack.Peek();
                curState.DisableTouch();
                Log4U.LogDebug("cur", curState.UIType);
                Tweener tweener = nextState.BeginEnterTween();
                tweener.OnComplete(delegate()
                {
                    curState.OnHide();
                    curState.EnabelTouch();
                });
            }
            _stateStack.Push(nextState);
        }
Exemplo n.º 19
0
        private void DoBeginSendPacket(ENetworkMessage networkMessage, byte[] msgID)
        {
            try
            {
                byte[] sendBuffer = new byte[HEAD_SIZE * HEAD_NUM];

                byte[] bufferSizeBytes     = MiniConverter.IntToBytes(HEAD_SIZE * HEAD_NUM);
                byte[] networkMessageBytes = MiniConverter.IntToBytes((int)networkMessage);

                Array.Copy(bufferSizeBytes, 0, sendBuffer, HEAD_SIZE * 0, HEAD_SIZE);
                Array.Copy(networkMessageBytes, 0, sendBuffer, HEAD_SIZE * 1, HEAD_SIZE);
                Array.Copy(msgID, 0, sendBuffer, HEAD_SIZE * 2, HEAD_SIZE);

                lock (_socket)
                {
                    _socket.BeginSend(sendBuffer, 0, HEAD_SIZE * HEAD_NUM, SocketFlags.None, new AsyncCallback(EndSendPacket), null);
                }
            }
            catch (Exception ex)
            {
                Log4U.LogError(ex.Message);
            }
        }
Exemplo n.º 20
0
        private IEnumerator BeginConnection()
        {
            try
            {
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                _socket.BeginConnect(GlobalVars.IPAddress, GlobalVars.IPPort, new AsyncCallback(FinishConnection), null);
            }
            catch (Exception ex)
            {
                Log4U.LogError(ex.StackTrace);
                yield break;
            }

            yield return(new WaitForSeconds(CONNECT_TIME_OUT));

            if (_socket.Connected == false)
            {
                Log4U.LogInfo("Client Connect Time Out...");
                CloseConnection();
            }

            _isKeepAlive = _socket.Connected;
        }
Exemplo n.º 21
0
 public void RemoveChatLog(string chatID)
 {
     Log4U.LogDebug(_chatLogDict.Remove(chatID));
 }
Exemplo n.º 22
0
 public void OnDragScrollRect(Vector2 dragVec)
 {
     Log4U.LogInfo(dragVec);
 }
Exemplo n.º 23
0
 public void OnConfirmDeleteChatLog()
 {
     GlobalChat.GetInstance().RemoveChatLog(_chatLog.chatID);
     Destroy(gameObject);
     Log4U.LogDebug("chat count", GlobalChat.GetInstance().Count);
 }
Exemplo n.º 24
0
        public static IExtensible UnPack(ENetworkMessage networkMessage, int startIndex, int length, byte[] buffer)
        {
            IExtensible packet = null;

            try
            {
                using (MemoryStream streamForProto = new MemoryStream(buffer, startIndex, length))
                {
                    switch (networkMessage)
                    {
                    case ENetworkMessage.KEEP_ALIVE_SYNC:
                        packet = Serializer.Deserialize <KeepAliveSyncPacket>(streamForProto);
                        break;

                    case ENetworkMessage.REGISTER_RSP:
                        packet = Serializer.Deserialize <RegisterRsp>(streamForProto);
                        break;

                    case ENetworkMessage.LOGIN_RSP:
                        packet = Serializer.Deserialize <LoginRsp>(streamForProto);
                        break;

                    case ENetworkMessage.GET_USERINFO_RSP:
                        packet = Serializer.Deserialize <GetUserInfoRsp>(streamForProto);
                        break;

                    case ENetworkMessage.PERSONALSETTINGS_RSP:
                        packet = Serializer.Deserialize <PersonalSettingsRsp>(streamForProto);
                        break;

                    case ENetworkMessage.LOGOUT_RSP:
                        packet = Serializer.Deserialize <LogoutRsp>(streamForProto);
                        break;

                    case ENetworkMessage.ADD_FRIEND_RSP:
                        packet = Serializer.Deserialize <AddFriendRsp>(streamForProto);
                        break;

                    case ENetworkMessage.DELETE_FRIEND_RSP:
                        packet = Serializer.Deserialize <DeleteFriendRsp>(streamForProto);
                        break;

                    case ENetworkMessage.OFFLINE_SYNC:
                        packet = Serializer.Deserialize <OffLineSync>(streamForProto);
                        break;

                    case ENetworkMessage.GET_PERSONALINFO_RSP:
                        packet = Serializer.Deserialize <GetPersonalInfoRsp>(streamForProto);
                        break;

                    case ENetworkMessage.CHANGE_FRIEND_SYNC:
                        packet = Serializer.Deserialize <ChangeFriendSync>(streamForProto);
                        break;

                    case ENetworkMessage.SEND_CHAT_RSP:
                        packet = Serializer.Deserialize <SendChatRsp>(streamForProto);
                        break;

                    case ENetworkMessage.RECEIVE_CHAT_SYNC:
                        packet = Serializer.Deserialize <ReceiveChatSync>(streamForProto);
                        break;

                    case ENetworkMessage.CREATE_GROUP_CHAT_RSP:
                        packet = Serializer.Deserialize <CreateGroupChatRsp>(streamForProto);
                        break;

                    case ENetworkMessage.CHANGE_GROUP_SYNC:
                        packet = Serializer.Deserialize <ChangeGroupSync>(streamForProto);
                        break;

                    case ENetworkMessage.CHANGE_GROUP_RSP:
                        packet = Serializer.Deserialize <ChangeGroupRsp>(streamForProto);
                        break;

                    case ENetworkMessage.GET_GROUP_INFO_RSP:
                        packet = Serializer.Deserialize <GetGroupInfoRsp>(streamForProto);
                        break;

                    default:
                        Log4U.LogInfo("No Such Packet, packet type is " + networkMessage);
                        break;
                    }
                }
            }
            catch (System.Exception ex)
            {
                Log4U.LogError(ex.Message + "\n " + ex.StackTrace + "\n" + ex.Source);
            }

            return(packet);
        }
Exemplo n.º 25
0
        private void EndReceivePacket(IAsyncResult ar)
        {
            int bytesRead = -1;

            try
            {
                if (IsConncted)
                {
                    lock (_socket)
                    {
                        bytesRead = _socket.EndReceive(ar);
                    }
                }

                if (bytesRead == -1)
                {
                    CloseConnection();
                    return;
                }
            }
            catch (ObjectDisposedException)
            {
                Log4U.LogInfo("Receive Closed");
            }
            catch (Exception ex)
            {
                Log4U.LogError(ex.Message + "\n " + ex.StackTrace + "\n" + ex.Source);
            }


            // Begin Read //
            int position = 0;

            while (position < bytesRead)
            {
                int             bufferSize     = MiniConverter.BytesToInt(_receiveBuffer, position + HEAD_SIZE * 0);
                ENetworkMessage networkMessage = (ENetworkMessage)MiniConverter.BytesToInt(_receiveBuffer, position + HEAD_SIZE * 1);

                byte[] msgIDBytes = new byte[HEAD_SIZE];
                for (int i = 0; i < HEAD_SIZE; i++)
                {
                    msgIDBytes[i] = _receiveBuffer[position + HEAD_SIZE * 2 + i];
                }
                string msgID = BitConverter.ToString(msgIDBytes);

                if (networkMessage != ENetworkMessage.KEEP_ALIVE_SYNC)
                {
                    Log4U.LogInfo("networkMessage : " + networkMessage, "msgID : " + msgID, "bufferSize : " + bufferSize);
                }

                if (position + bufferSize > bytesRead)
                {
                    Log4U.LogError("Error receive packet, packet is too long : " + bufferSize);
                    break;
                }

                IExtensible rspPacket = UnPackTool.UnPack(networkMessage, position + HEAD_SIZE * HEAD_NUM, bufferSize - HEAD_NUM * HEAD_SIZE, _receiveBuffer);
                if (rspPacket == null)
                {
                    continue;
                }

                MessageArgs args = new MessageArgs
                {
                    iMessageType = (uint)networkMessage,
                    kParam       = rspPacket,
                };

                NetworkMessageParam networkParam = new NetworkMessageParam
                {
                    rsp   = rspPacket,
                    msgID = msgID,
                };

                lock (_msgIDDict)
                {
                    if (_msgIDDict.ContainsKey(msgID))
                    {
                        networkParam.req = _msgIDDict[msgID];
                    }

                    if (_needReqMessageType.Contains(networkMessage))
                    {
                        args.kParam = networkParam;
                    }

                    if (_forcePushMessageType.Contains(networkMessage) || _msgIDDict.ContainsKey(msgID))
                    {
                        MessageDispatcher.GetInstance().DispatchMessageAsync(args.iMessageType, args.kParam);
                    }

                    if (_msgIDDict.ContainsKey(msgID))
                    {
                        RemoveMsgID(msgID);
                    }
                }

                //if (_forcePushMessageType.Contains(networkMessage))
                //{
                //    DoBeginSendPacket(networkMessage, msgIDBytes);
                //}

                position += bufferSize;
            }

            Array.Clear(_receiveBuffer, 0, _socket.ReceiveBufferSize);

            BeginReceivePacket();
        }