public override TrinityErrorCode SaveCell(long cell_id, byte *cellBytes, int cellSize, ushort cellType) { TrinityMessage msg = new TrinityMessage(TrinityMessageType.PRESERVED_SYNC_WITH_RSP, (ushort)RequestType.SaveCell, cellSize + 14 /*cell_type(2)+ cell_id(8) +cell_size(4)*/); byte * p = msg.Buffer + TrinityMessage.Offset; *(ushort *)p = cellType; p += 2; *(long *)p = cell_id; p += 8; *(int *)p = cellSize; p += 4; Memory.Copy(cellBytes, p, cellSize); TrinityResponse response; Network.Client.SynClient sc = GetClient(); bool sendSuccess = (TrinityErrorCode.E_SUCCESS == sc.SendMessage(msg.Buffer, msg.Size, out response)); PutBackClient(sc); msg.Dispose(); var eResult = response.ErrorCode; response.Dispose(); return(sendSuccess ? eResult : TrinityErrorCode.E_NETWORK_SEND_FAILURE); }
private int Heartbeat() { Network.Client.SynClient sc = GetClient(); TrinityErrorCode eResult = sc.Heartbeat(); PutBackClient(sc); if (TrinityErrorCode.E_SUCCESS == eResult) { if (!m_connected) { m_connected = true; m_memorycloud.ReportServerConnectedEvent(this); } } else { if (m_connected) { m_connected = false; m_memorycloud.ReportServerDisconnectedEvent(this); InvalidateSynClients(); } } return(TrinityConfig.HeartbeatInterval); }
public override TrinityErrorCode LoadCell(long cellId, out byte[] cellBuff, out ushort cellType) { TrinityMessage msg = new TrinityMessage(TrinityMessageType.PRESERVED_SYNC_WITH_RSP, (ushort)RequestType.LoadCellWithType, sizeof(long)); *(long *)(msg.Buffer + TrinityMessage.Offset) = cellId; TrinityResponse response; Network.Client.SynClient sc = GetClient(); bool sendSuccess = (TrinityErrorCode.E_SUCCESS == sc.SendMessage(msg.Buffer, msg.Size, out response)); PutBackClient(sc); msg.Dispose(); int payload_len = response.Size - response.Offset; byte *payload_ptr = response.Buffer + response.Offset; int cell_len = payload_len - sizeof(ushort); cellBuff = new byte[cell_len]; var eResult = response.ErrorCode; Memory.Copy(payload_ptr, 0, cellBuff, 0, cell_len); cellType = *(ushort *)(payload_ptr + cell_len); response.Dispose(); return(sendSuccess ? eResult : TrinityErrorCode.E_NETWORK_SEND_FAILURE); }
public override bool Contains(long cellId) { TrinityMessage request; TrinityResponse response; TrinityErrorCode eResult; bool contains = false; request = new TrinityMessage(TrinityMessageType.PRESERVED_SYNC_WITH_RSP, (ushort)RequestType.Contains, sizeof(long)); *(long *)(request.Buffer + TrinityMessage.Offset) = cellId; Network.Client.SynClient sc = GetClient(); eResult = sc.SendMessage(request.Buffer, request.Size, out response); PutBackClient(sc); if (eResult == TrinityErrorCode.E_SUCCESS) { //returns E_CELL_FOUND or E_CELL_NOTFOUND contains = (response.ErrorCode == TrinityErrorCode.E_CELL_FOUND); } request.Dispose(); response.Dispose(); _error_check(eResult); return(contains); }
public TrinityErrorCode UpdateCell(long cellId, byte *cellPtr, int length) { TrinityMessage msg = new TrinityMessage(TrinityMessageType.PRESERVED_SYNC_WITH_RSP, (ushort)RequestType.UpdateCell, length + 12 /*cell_id(8) +cell_size(4)*/); byte * p = msg.Buffer + TrinityMessage.Offset; *(long *)p = cellId; p += 8; *(int *)p = length; p += 4; Memory.Copy(cellPtr, p, length); TrinityResponse response; Network.Client.SynClient sc = GetClient(); bool sendSuccess = (TrinityErrorCode.E_SUCCESS == sc.SendMessage(msg.Buffer, msg.Size, out response)); PutBackClient(sc); msg.Dispose(); var eResult = response.ErrorCode; response.Dispose(); return(sendSuccess ? eResult : TrinityErrorCode.E_NETWORK_SEND_FAILURE); }
public override TrinityErrorCode RemoveCell(long cell_id) { TrinityMessage msg = new TrinityMessage(TrinityMessageType.PRESERVED_SYNC_WITH_RSP, (ushort)RequestType.RemoveCell, sizeof(long)); *(long *)(msg.Buffer + TrinityMessage.Offset) = cell_id; TrinityResponse response; Network.Client.SynClient sc = GetClient(); bool sendSuccess = (TrinityErrorCode.E_SUCCESS == sc.SendMessage(msg.Buffer, msg.Size, out response)); PutBackClient(sc); msg.Dispose(); var eResult = response.ErrorCode; response.Dispose(); return(sendSuccess ? eResult : TrinityErrorCode.E_NETWORK_SEND_FAILURE); }
private void ConnectIPEndPoint(IPEndPoint ip_endpoint) { while (true) { try { var client = new Network.Client.SynClient(ip_endpoint); if (client.sock_connected) { ConnPool.Add(client); ++m_client_count; connected = true; break; } } catch (Exception) { Log.WriteLine(LogLevel.Debug, "Cannot connect to {0}", ip_endpoint); Thread.Sleep(100); } } }
private void Connect(ServerInfo server_info) { while (true) { try { var ep = server_info.EndPoint; var client = new Network.Client.SynClient(ep); if (client.sock_connected) { ConnPool.Add(client); ++m_client_count; m_connected = true; break; } } catch (Exception ex) { Log.WriteLine(LogLevel.Debug, "RemoteStorage: Cannot connect to {0}:{1}: {2}", server_info.HostName, server_info.Port, ex.Message); Thread.Sleep(100); } } }
private void PutBackClient(Network.Client.SynClient sc) { ConnPool.Add(sc); }