public void SendRequest(MsgCode protocolCode, byte[] data, ClientType type = ClientType.Tcp, Action onRequestSuccess = null, Action onResquestFailed = null, int resendTimes = 1) { DebugUtils.Log(DebugUtils.Type.Protocol, "try to send protocol " + protocolCode); if (notifySendThreadClosed) { DebugUtils.Log(DebugUtils.Type.Protocol, "Network message thread has been shutdown when trying to send protocol " + protocolCode); return; } if (type == ClientType.Tcp) { ClientTcpMessage message = new ClientTcpMessage((int)protocolCode, data, tcpSequence++); if (onRequestSuccess != null) { message.OnRequestSuccess += onRequestSuccess; } if (onResquestFailed != null) { message.OnRequestFailed += onResquestFailed; } tcpSendingQueue.Enqueue(message); NetworkAlert.StartWaiting(serverType, message, resendTimes); } else if (type == ClientType.Udp) { ClientUdpMessage[] messages = ClientUdpMessage.CreateUdpMessages((int)protocolCode, ref udpSequence, udpAck, data); int j = 0; for ( ; j < messages.Length; j++) { udpSendingQueue.Enqueue(messages[j]); } if (onRequestSuccess != null) { messages[j].OnRequestSuccess += onRequestSuccess; } if (onResquestFailed != null) { messages[j].OnRequestFailed += onResquestFailed; } } else { DebugUtils.LogError(DebugUtils.Type.AsyncSocket, string.Format("There is no such client type {0} to send request!", type)); } }
public void Reconnect(ClientType clientType, Action <ClientType> ReconnectSuccessCallback = null, Action <ClientType> ReconnectFailCallback = null) { if ((clientType == ClientType.Tcp || clientType == ClientType.Both) && (tcpClient != null && !tcpClient.IsConnected())) { ClearTcpClientMessage(); //TODO tcpSequence = 0; NetworkAlert.ResetWaitingMessages(serverType); tcpClient.Reconnect(ReconnectSuccessCallback, ReconnectFailCallback); } if ((clientType == ClientType.Udp || clientType == ClientType.Both) && (udpClient != null && !udpClient.IsConnected())) { ClearUdpClientMessage(); udpSequence = 0; udpClient.Reconnect(ReconnectSuccessCallback, ReconnectFailCallback); } }
public void Shutdown(Action ShutdownSuccessCallback = null) { OnShutdownSuccess = ShutdownSuccessCallback; notifySendThreadClosed = true; if (tcpClient != null) { tcpClient.Disconnect(() => { tcpClientClosed = true; if (udpClientClosed && sendingThreadClosed) { Loom.QueueOnMainThread(() => { NetworkAlert.ResetWaitingMessages(serverType); if (OnShutdownSuccess != null) { OnShutdownSuccess(); OnShutdownSuccess = null; } }); } }); } if (udpClient != null) { udpClient.Disconnect(() => { udpClientClosed = true; if (tcpClientClosed && sendingThreadClosed) { Loom.QueueOnMainThread(() => { NetworkAlert.ResetWaitingMessages(serverType); if (OnShutdownSuccess != null) { OnShutdownSuccess(); OnShutdownSuccess = null; } }); } }); } }
public void TcpResponseHandler(ServerTcpMessage[] messages) { //UiWaiting.InterruptWaitingTimer(); for (int j = 0; j < messages.Length; j++) { ServerTcpMessage m = messages[j]; Loom.QueueOnMainThread(() => { NetworkAlert.OnReceiving(serverType, m); Action <byte[]> handler; if (serverMessageHandlers.TryGetValue(m.protocalCode, out handler)) { DebugUtils.Log(DebugUtils.Type.Protocol, "The client handles the received protocol " + m.protocalCode); handler(m.data); } else { DebugUtils.LogError(DebugUtils.Type.Protocol, "For now, the client can't handles the received protocol " + m.protocalCode); } }); } }