blob: 9f1d8c21e8a8586d45754095e0269cf88842920a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Xml;
namespace Apache.Geode.DUnitFramework
{
public class DriverComm : MarshalByRefObject, IDriverComm
{
public static UnitFnMethodR<bool, string, string, string>
WinTaskDeleg = null;
public static UnitFnMethodR<string, string, string, string,
Dictionary<string, string>> ShellTaskDeleg = null;
public static UnitFnMethod TermDeleg = null;
#region IServerComm Members
public void Log(string clientId, string prefix, string message)
{
string logLine = Util.GetLogLine("CLIENT:" + prefix, message,
"Client:" + clientId);
Util.RawLog(logLine);
}
public void ClientListening(string clientId)
{
lock (((ICollection)UnitProcess.ProcessIDMap).SyncRoot)
{
System.Threading.ManualResetEvent clientEvent;
if (UnitProcess.ProcessIDMap.TryGetValue(clientId, out clientEvent))
{
clientEvent.Set();
}
}
}
public bool RunWinTask(string clientId, string hostName, string taskSpec)
{
if (WinTaskDeleg != null)
{
return WinTaskDeleg(clientId, hostName, taskSpec);
}
return false;
}
public string RunShellTask(string clientId, string hostName,
string shellCmd, Dictionary<string, string> envVars)
{
if (ShellTaskDeleg != null)
{
return ShellTaskDeleg(clientId, hostName, shellCmd, envVars);
}
return null;
}
public void Term()
{
if (TermDeleg != null)
{
TermDeleg();
}
}
#endregion
}
public class BBComm : MarshalByRefObject, IBBComm
{
public static Dictionary<string, object> KeyValueMap =
new Dictionary<string, object>();
#region IBBComm Members
public void WriteObject(string key, object value)
{
lock (((ICollection)KeyValueMap).SyncRoot)
{
KeyValueMap[key] = value;
}
}
public int AddInt(string key, int incValue)
{
lock (((ICollection)KeyValueMap).SyncRoot)
{
object result;
if (KeyValueMap.TryGetValue(key, out result))
{
try
{
int iResult = (int)result;
iResult += incValue;
KeyValueMap[key] = iResult;
return iResult;
}
catch (InvalidCastException)
{
throw new KeyNotFoundException("The value for key '" + key +
"' is not an integer.");
}
}
else
{
throw new KeyNotFoundException("The key '" + key +
"' does not exist.");
}
}
}
public int AddOrSetInt(string key, int val)
{
int iResult = val;
lock (((ICollection)KeyValueMap).SyncRoot)
{
object result;
if (KeyValueMap.TryGetValue(key, out result))
{
try
{
int origVal = (int)result;
iResult += origVal;
}
catch (InvalidCastException)
{
}
}
KeyValueMap[key] = iResult;
}
return iResult;
}
public object ReadObject(string key)
{
lock (((ICollection)KeyValueMap).SyncRoot)
{
object result;
if (KeyValueMap.TryGetValue(key, out result))
{
return result;
}
else
{
throw new KeyNotFoundException("The key '" + key +
"' does not exist.");
}
}
}
public void RemoveObject(string key)
{
lock (((ICollection)KeyValueMap).SyncRoot)
{
if (KeyValueMap.ContainsKey(key))
{
KeyValueMap.Remove(key);
}
}
}
public void Clear()
{
lock (((ICollection)KeyValueMap).SyncRoot)
{
// to print the BB data in Driver log
/*
foreach (KeyValuePair<string, object> bbMap in KeyValueMap)
{
Util.Log("BB dump Key = {0} , Value = {1} :", bbMap.Key, bbMap.Value);
}
*/
KeyValueMap.Clear();
}
}
public void Exit()
{
Util.Log("Ending the BBServer.");
Environment.Exit(0);
Util.Process.Kill();
}
#endregion
}
}